SlideShare a Scribd company logo
1 of 28
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
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!

More Related Content

What's hot

Hokuriku.net 2013 01-26 node.js
Hokuriku.net 2013 01-26 node.jsHokuriku.net 2013 01-26 node.js
Hokuriku.net 2013 01-26 node.js
Tadahiro Ishisaka
 

What's hot (20)

【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
 
Node.js Hands-On
Node.js Hands-OnNode.js Hands-On
Node.js Hands-On
 
Node.js入門
Node.js入門Node.js入門
Node.js入門
 
Node js 入門
Node js 入門Node js 入門
Node js 入門
 
最近のフロントエンドツールの紹介
最近のフロントエンドツールの紹介最近のフロントエンドツールの紹介
最近のフロントエンドツールの紹介
 
サーバサイドNodeの使い道
サーバサイドNodeの使い道サーバサイドNodeの使い道
サーバサイドNodeの使い道
 
後期講座01
後期講座01後期講座01
後期講座01
 
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみるづや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
 
Node.jsでサーバプログラマ デビューしよう
Node.jsでサーバプログラマ デビューしようNode.jsでサーバプログラマ デビューしよう
Node.jsでサーバプログラマ デビューしよう
 
大阪Node学園 七時限目 「ゼロからはじめるnode.js」
大阪Node学園 七時限目 「ゼロからはじめるnode.js」大阪Node学園 七時限目 「ゼロからはじめるnode.js」
大阪Node学園 七時限目 「ゼロからはじめるnode.js」
 
TypeScriptへの入口
TypeScriptへの入口TypeScriptへの入口
TypeScriptへの入口
 
Node.js×mongo dbで3年間サービス運用してみた話
Node.js×mongo dbで3年間サービス運用してみた話Node.js×mongo dbで3年間サービス運用してみた話
Node.js×mongo dbで3年間サービス運用してみた話
 
Sails.jsのメリット・デメリット
Sails.jsのメリット・デメリットSails.jsのメリット・デメリット
Sails.jsのメリット・デメリット
 
Hokuriku.net 2013 01-26 node.js
Hokuriku.net 2013 01-26 node.jsHokuriku.net 2013 01-26 node.js
Hokuriku.net 2013 01-26 node.js
 
MVCフレームワーク Sails.jsについて機能紹介
MVCフレームワーク Sails.jsについて機能紹介MVCフレームワーク Sails.jsについて機能紹介
MVCフレームワーク Sails.jsについて機能紹介
 
Babelで先取り次世代javascript
Babelで先取り次世代javascriptBabelで先取り次世代javascript
Babelで先取り次世代javascript
 
ビルド職人の朝は早い
ビルド職人の朝は早いビルド職人の朝は早い
ビルド職人の朝は早い
 
Reactとbabelで簡易タスク管理ツール作ってみた
Reactとbabelで簡易タスク管理ツール作ってみたReactとbabelで簡易タスク管理ツール作ってみた
Reactとbabelで簡易タスク管理ツール作ってみた
 
NDBCLUSTERを使わない理由
NDBCLUSTERを使わない理由NDBCLUSTERを使わない理由
NDBCLUSTERを使わない理由
 
Grunt入門
Grunt入門Grunt入門
Grunt入門
 

Viewers also liked

2012アーバニズム_A-4_ファランステリーとファミリステール_赤峰孔明_11N1002
2012アーバニズム_A-4_ファランステリーとファミリステール_赤峰孔明_11N10022012アーバニズム_A-4_ファランステリーとファミリステール_赤峰孔明_11N1002
2012アーバニズム_A-4_ファランステリーとファミリステール_赤峰孔明_11N1002
aamondo
 
E 12 bsp0526_jitu jagwani visual cv
E 12 bsp0526_jitu jagwani visual cvE 12 bsp0526_jitu jagwani visual cv
E 12 bsp0526_jitu jagwani visual cv
Jitu Jagwani
 
iHSystem presentation
iHSystem presentationiHSystem presentation
iHSystem presentation
Ahmed Tibi
 
2012アーバニズム_B-3_ブロード・エーカー・シティとレヴィット・タウン_赤峰 孔明_11n1002
2012アーバニズム_B-3_ブロード・エーカー・シティとレヴィット・タウン_赤峰 孔明_11n10022012アーバニズム_B-3_ブロード・エーカー・シティとレヴィット・タウン_赤峰 孔明_11n1002
2012アーバニズム_B-3_ブロード・エーカー・シティとレヴィット・タウン_赤峰 孔明_11n1002
aamondo
 
Food security bill
Food security billFood security bill
Food security bill
Jitu Jagwani
 

Viewers also liked (16)

2012アーバニズム_A-4_ファランステリーとファミリステール_赤峰孔明_11N1002
2012アーバニズム_A-4_ファランステリーとファミリステール_赤峰孔明_11N10022012アーバニズム_A-4_ファランステリーとファミリステール_赤峰孔明_11N1002
2012アーバニズム_A-4_ファランステリーとファミリステール_赤峰孔明_11N1002
 
E 12 bsp0526_jitu jagwani visual cv
E 12 bsp0526_jitu jagwani visual cvE 12 bsp0526_jitu jagwani visual cv
E 12 bsp0526_jitu jagwani visual cv
 
Morinezumiiii 20150425-bluetooth
Morinezumiiii 20150425-bluetoothMorinezumiiii 20150425-bluetooth
Morinezumiiii 20150425-bluetooth
 
Door monitoring system
Door monitoring systemDoor monitoring system
Door monitoring system
 
iHSystem presentation
iHSystem presentationiHSystem presentation
iHSystem presentation
 
Go言語の紹介
Go言語の紹介Go言語の紹介
Go言語の紹介
 
Morinezumiiii 20150425-denkikairo1
Morinezumiiii 20150425-denkikairo1Morinezumiiii 20150425-denkikairo1
Morinezumiiii 20150425-denkikairo1
 
NPMで便利なツールの紹介
NPMで便利なツールの紹介NPMで便利なツールの紹介
NPMで便利なツールの紹介
 
Ibarakidc softes1
Ibarakidc softes1Ibarakidc softes1
Ibarakidc softes1
 
2012アーバニズム_B-3_ブロード・エーカー・シティとレヴィット・タウン_赤峰 孔明_11n1002
2012アーバニズム_B-3_ブロード・エーカー・シティとレヴィット・タウン_赤峰 孔明_11n10022012アーバニズム_B-3_ブロード・エーカー・シティとレヴィット・タウン_赤峰 孔明_11n1002
2012アーバニズム_B-3_ブロード・エーカー・シティとレヴィット・タウン_赤峰 孔明_11n1002
 
Node.js地獄巡り
Node.js地獄巡りNode.js地獄巡り
Node.js地獄巡り
 
Go+revel
Go+revelGo+revel
Go+revel
 
Shame
Shame Shame
Shame
 
Food security bill
Food security billFood security bill
Food security bill
 
Raspberry PiでNode.js(ミニラックサーバ構築編)
Raspberry PiでNode.js(ミニラックサーバ構築編)Raspberry PiでNode.js(ミニラックサーバ構築編)
Raspberry PiでNode.js(ミニラックサーバ構築編)
 
Hardware By the Numbers: O'Reilly Solid Keynote
Hardware By the Numbers: O'Reilly Solid Keynote Hardware By the Numbers: O'Reilly Solid Keynote
Hardware By the Numbers: O'Reilly Solid Keynote
 

Similar to 20131012 nodejs

Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築
AimingStudy
 
Ruby motion
Ruby motionRuby motion
Ruby motion
jewel12
 
JavaScriptトレンド総括(2014)
JavaScriptトレンド総括(2014)JavaScriptトレンド総括(2014)
JavaScriptトレンド総括(2014)
VOYAGE GROUP
 

Similar to 20131012 nodejs (20)

Nodejs
NodejsNodejs
Nodejs
 
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
 
Couch DB in 15minutes
Couch DB in 15minutesCouch DB in 15minutes
Couch DB in 15minutes
 
Node.jsで始める Modern JavaScript Framework
Node.jsで始める Modern JavaScript FrameworkNode.jsで始める Modern JavaScript Framework
Node.jsで始める Modern JavaScript Framework
 
初めてのMongo db
初めてのMongo db初めてのMongo db
初めてのMongo db
 
javascript を Xcode でテスト
javascript を Xcode でテストjavascript を Xcode でテスト
javascript を Xcode でテスト
 
ASP.NET Core のお気に入りの機能たち (docker向け)
ASP.NET Core のお気に入りの機能たち (docker向け)ASP.NET Core のお気に入りの機能たち (docker向け)
ASP.NET Core のお気に入りの機能たち (docker向け)
 
worker_threadsを使った実装の勘所
worker_threadsを使った実装の勘所worker_threadsを使った実装の勘所
worker_threadsを使った実装の勘所
 
AngularJSを通してDockerと触れ合った
AngularJSを通してDockerと触れ合ったAngularJSを通してDockerと触れ合った
AngularJSを通してDockerと触れ合った
 
Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築
 
Ruby motion
Ruby motionRuby motion
Ruby motion
 
Bp study39 nodejs
Bp study39 nodejsBp study39 nodejs
Bp study39 nodejs
 
JavaScriptトレンド総括(2014)
JavaScriptトレンド総括(2014)JavaScriptトレンド総括(2014)
JavaScriptトレンド総括(2014)
 
なぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのかなぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのか
 
Sql world を支える技術
Sql world を支える技術Sql world を支える技術
Sql world を支える技術
 
Concurrent Programm in JavaScript
Concurrent Programm in JavaScriptConcurrent Programm in JavaScript
Concurrent Programm in JavaScript
 
Concurrent Programming in JavaScript
Concurrent Programming in JavaScriptConcurrent Programming in JavaScript
Concurrent Programming in JavaScript
 
東京Node学園 15時限目めも
東京Node学園 15時限目めも東京Node学園 15時限目めも
東京Node学園 15時限目めも
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村
 

20131012 nodejs