前回の【node.js】socket.ioを使って簡単にチャットを作る方法の続きです。今回はチャットした内容をデータベースに保存する方法です。こうすることによって、一回ブラウザを閉じて再度開いた時に閉じる前のメッセージが残っていたり、途中から参加した人も今までのメッセージが読めるようになります。いくら保存できるようになったとしても、製品レベルには程遠く、脆弱性対策もしていないので、今回は、node.jsでMongoDBを使うことと、MongoDB のオブジェクトモデリングツールであるMongoose(マングース)の使い方のポイントだけを抑えて頂ければと思います。
今回のポイント Mongooseをインストールして簡単な使い方。 チャットのメッセージを保存する。 ブラウザを閉じてもメッセージが残っている。 メッセージを削除する。 削除したメッセージは、相手にも削除されるようにする。 ※予めMongoDBが使える状態にしててください。
必要なnode_modules ejs express mongoose socket.io Mongooseのインストール インストールはいつものnpmでめっちゃ簡単にインストールできます。
$ npm install mongoose app.jsを編集 前回の【node.js】socket.ioを使って簡単にチャットを作る方法のソースからMongooseの追記だけをしたサンプルです。
app.js 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
※この記事の続きもよくご覧いただいてます。※
【Node.js】Socket.IO+MongoDBを使って保存できるチャットを作る方法
なんとかチャットを作ることができるようになりました。まだ仕組みの表面しか理解できてないかもしれませんが、入り口には立てたと思います。ただソースを落としてきて、「あー動いた。」でもいいんですが、僕は分からなくてもソースを書いていけば、そのうち理解できるかもという非効率な勉強法が好きなので、^-^; 同じ方がいらっしゃればお役に立てる内容になればと思います。
ソースコード https://github.com/cotapon/chat-socket_io-sample
環境 MacOS 10.6.8
ターミナル.app
node v0.6.11 or v0.8.4 ※
npm v1.1.45
express v2.5.11
socket.io v0.8.7
※node.jsのバージョンによっては、socket.ioが繋がらないなどの現象があります。今回はv0.6.11と、2012年7月31日現在の安定版、v0.8.4でも検証して成功しました。 node.jsのバージョンを確認 まず、node.jsのバージョンを確認しましょう。
$ node -v v0.6.11 もし、v0.6.x以下でしたら、うまくexpressとsocket.ioが繋がらない可能性がありますので、node.jsのバージョンを上げます。 参考にnvmという、node.jsのバージョン管理ツールで変更する方法をメモします。 nvmがインストールされていないかたは、こちらの記事を御覧ください。
//node.js v0.8.4をインストール $ nvm install v0.8.4 //インストールしたバージョンを使います。 $ nvm ues v0.8.4 Now using node v0.8.4 //ターミナルを閉じても使えるようにしておく $ nvm alias default v0.8.4 default -> v0.8.4 npmをインストールする。 ※既にnpmが入ってる方は、ここの項目は飛ばして下さい。
//npmをインストール $ curl http://npmjs.
[INFO] Restarting [ERROR] Error Error: Cannot find module 'socket.io' node.jsを実行した時に、socket.ioがうまく繋がらなかった時のエラー。いろいろ試してsocket.ioが繋がった時のメモを残します。
検証環境 MacOS 10.6.8
ターミナル.app
node v0.6.18
npm v1.1.24
express v2.5.10
socket.io v0.8.7
現時点でsocket.ioの最新バージョンはv0.9.xでしたが、0.8.7にすればとりあえず動きました。
$ npm install socket.io@0.8.7 app.js編集 app.js 1
2
var app = module.exports = express.createServer(); var io = require('socket.io').listen(app);//この行を追加 node app.jsで起動してみる $ node app.js info - socket.