20131012 nodejs
DESCRIPTION
TRANSCRIPT
Node.js で色々(続き
茨城でべろっぱコミュニティ@morinezumiiii
#ibarakidc
前回のおさらい
•Node.js はサーバサイド JavaScript
•でもただの JavaScript じゃない
•基本的に非同期型プログラミング→コールバックネストが地獄への階段
前回のおさらい
•MongoDB は NoSQL のひとつ
•他の KVS などと違いドキュメント指向型
•これが上手い具合に RDB 脳にやさしい→と思った?残念!さやk それやると痛い目に遭う
前回のおさらい
•Socket.IO は Node.js モジュールで実装出来る WebSocket
•WebSocket に対応していないクソいブラウザでも Socket.IO が吸収
•使い方によっては jQuery.Ajax の代わりになる(けど全部置き換える必要はない?
おさらい終わり
前回やったこと
•Node.JS をインストール
•MongoDB をインストール
•express.js フレームワークをインストール
•express.js で Socket.IO を使ったチャットアプリを作った
が、中途半端に終わりました
今回はその続き
というか出来上がったものをサックリと解説
作ったもの
•Node.js + express.js + Socket.IO +MongoDB で jQuery は使うけどjQueryAjax を使わないで Socket.IOだけでリアルタイムに MongoDB へのデータ入出力と HTML へのレンダリングが出来るを昨日 2 時間くらいでサクッと作ったアプリ
こんなんhttps://github.com/morinezumiiii/nodejs-sample-mongoose-socketio
つまりNode.jsNode.js
Socket.IOSocket.IO MongooseMongoose
MongoDBMongoDB
WebWeb ブラウザブラウザSocket.IOSocket.IO HTMLHTML
JadeJade
ユーザ操作ユーザ操作
jQueryjQuery
いいからコード見せろや
構成
•Node.js
•express.js
•Socket.IO
•Mongoose
構成app.js
package.json
public/
└javascripts/
└client.js
routes/
└index.js
views/
├layout.jade
└index.jade
models/
└users.js
node_modueles/
構成app.js ←Node.js サーバ/リクエスト/ Socket.IO
package.json
public/
└javascripts/
└client.js
routes/
└index.js
views/
├layout.jade
└index.jade
models/
└users.js
node_modueles/
構成app.js
package.json ← ほしい物リストpublic/
└javascripts/
└client.js
routes/
└index.js
views/
├layout.jade
└index.jade
models/
└users.js
node_modueles/
構成app.js
package.json
public/
└javascripts/
└client.js ←New! クライアント側で使用する JavaScript
routes/
└index.js
views/
├layout.jade
└index.jade
models/
└users.js
node_modueles/
構成app.js
package.json
public/
└javascripts/
└client.js
routes/
└index.js ←app.js がリクエストをここにルーティングしてくるviews/
├layout.jade
└index.jade
models/
└users.js
node_modueles/
構成app.js
package.json
public/
└javascripts/
└client.js
routes/
└index.js
views/
├layout.jade ←HTML ヘッダ部分 └index.jade
models/
└users.js
node_modueles/
構成app.js
package.json
public/
└javascripts/
└client.js
routes/
└index.js
views/
├layout.jade
└index.jade ←HTML ボデー部分models/
└users.js
node_modueles/
構成app.js
package.json
public/
└javascripts/
└client.js
routes/
└index.js
views/
├layout.jade
└index.jade
models/
└users.js ←New! Mongoose を使ってコレクションをモデル化node_modueles/
やってること• クライアントから index ページが呼び出され
るクライアント側に jQuery と client.js とsocket.io.js が読み込まれる
• setDataUsers ボタンを押す→ users にドキュメントを追加
• getDataUsers ボタンを押す→ users からドキュメントを取得し、 HTML形式に整形して jQuery によって HTML を書換え
mongoose モデル• mongoose には Schema と Model の機能が
ある
• Schema :コレクションがどうあるべきか定義 ドキュメント作成時に値の validateや default 値、型チェックも可能
• Model :用意した Schema と MongoDB コレクションを紐付けてモデル化
exports と require
• require() : Node モジュールをロード 自分で用意した js もロード可能 ※さっきの model や lib など
• exports :外部に公開したい時に使用• 例: models/users.js で
exports.Users = mongoose.model('Users', UserSchema); したものを、 app.js などで var Users = require('./models/users.js').Users すると、app.js 内で Users.find() が使えるようになる
ちなみに
• Mongoose にも便利なプラグインが沢山
• 例えば、 mongoose-file(mongoose-thumbnail)MongooseSchema に Plugin として set することでsave 時に画像ファイルのアップロードとMongoDB のドキュメント内にバイナリ保存→これ自前で作るとめんどくさい
どうでもいいけど• 最近ジョジョを読み始めました
Thanks!