Suche senden
Hochladen
大阪Node学園八時限目 「expressで作るWebアプリ」
•
9 gefällt mir
•
4,655 views
Shunsuke Watanabe
Folgen
Melden
Teilen
Melden
Teilen
1 von 50
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作る
Kiyoshi SATOH
Ruby on Rails Tutorial Chapter8-10
Ruby on Rails Tutorial Chapter8-10
Sea Mountain
Vue入門
Vue入門
Takeo Noda
はじめてのSpring Boot
はじめてのSpring Boot
なべ
はじめてのVue.js
はじめてのVue.js
Kei Yagi
Vue Router + Vuex
Vue Router + Vuex
Kei Yagi
JAZUG女子部 第2回勉強会 ハンズオン
JAZUG女子部 第2回勉強会 ハンズオン
Kana SUZUKI
Windows スクリプトセミナー WMI編 VBScript&WMI
Windows スクリプトセミナー WMI編 VBScript&WMI
junichi anno
Empfohlen
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作る
Kiyoshi SATOH
Ruby on Rails Tutorial Chapter8-10
Ruby on Rails Tutorial Chapter8-10
Sea Mountain
Vue入門
Vue入門
Takeo Noda
はじめてのSpring Boot
はじめてのSpring Boot
なべ
はじめてのVue.js
はじめてのVue.js
Kei Yagi
Vue Router + Vuex
Vue Router + Vuex
Kei Yagi
JAZUG女子部 第2回勉強会 ハンズオン
JAZUG女子部 第2回勉強会 ハンズオン
Kana SUZUKI
Windows スクリプトセミナー WMI編 VBScript&WMI
Windows スクリプトセミナー WMI編 VBScript&WMI
junichi anno
Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編
なべ
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
Masatoshi Tada
メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3
メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3
日本Javaユーザーグループ
開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~
開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~
CubedKachi
WordPress widget api
WordPress widget api
Takami Kazuya
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Kei Yagi
Vue.js 基礎 + Vue CLI の使い方
Vue.js 基礎 + Vue CLI の使い方
Kei Yagi
実は怖くないDevOps
実は怖くないDevOps
Masanori Ishigami
アプリコンテスト
アプリコンテスト
Tomonori Yamada
Windows azureって何
Windows azureって何
Kana SUZUKI
EWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作る
EWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作る
Kiyoshi Sawada
Rails and twitter #twtr_hack
Rails and twitter #twtr_hack
i7a
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発
Mitsuru Katoh
ニフティ社内の Chef 利用について
ニフティ社内の Chef 利用について
tidnlyam
20120118 titanium
20120118 titanium
Hiroshi Oyamada
プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話
Shohei Okada
【Xpages day2016】標準コントールを使わないxpage開発
【Xpages day2016】標準コントールを使わないxpage開発
西 雄樹
Java女子部 Java EEハンズオン(応用編)
Java女子部 Java EEハンズオン(応用編)
Misaki Kajiura
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
Tetsuji Hayashi
Heroku java
Heroku java
Kazuyuki Kawamura
Vue.js で XSS
Vue.js で XSS
tobaru_yuta
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
Weitere ähnliche Inhalte
Was ist angesagt?
Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編
なべ
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
Masatoshi Tada
メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3
メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3
日本Javaユーザーグループ
開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~
開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~
CubedKachi
WordPress widget api
WordPress widget api
Takami Kazuya
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Kei Yagi
Vue.js 基礎 + Vue CLI の使い方
Vue.js 基礎 + Vue CLI の使い方
Kei Yagi
実は怖くないDevOps
実は怖くないDevOps
Masanori Ishigami
アプリコンテスト
アプリコンテスト
Tomonori Yamada
Windows azureって何
Windows azureって何
Kana SUZUKI
EWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作る
EWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作る
Kiyoshi Sawada
Rails and twitter #twtr_hack
Rails and twitter #twtr_hack
i7a
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発
Mitsuru Katoh
ニフティ社内の Chef 利用について
ニフティ社内の Chef 利用について
tidnlyam
20120118 titanium
20120118 titanium
Hiroshi Oyamada
プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話
Shohei Okada
【Xpages day2016】標準コントールを使わないxpage開発
【Xpages day2016】標準コントールを使わないxpage開発
西 雄樹
Java女子部 Java EEハンズオン(応用編)
Java女子部 Java EEハンズオン(応用編)
Misaki Kajiura
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
Tetsuji Hayashi
Heroku java
Heroku java
Kazuyuki Kawamura
Was ist angesagt?
(20)
Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3
メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3
開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~
開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~
WordPress widget api
WordPress widget api
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Vue.js 基礎 + Vue CLI の使い方
Vue.js 基礎 + Vue CLI の使い方
実は怖くないDevOps
実は怖くないDevOps
アプリコンテスト
アプリコンテスト
Windows azureって何
Windows azureって何
EWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作る
EWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作る
Rails and twitter #twtr_hack
Rails and twitter #twtr_hack
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発
ニフティ社内の Chef 利用について
ニフティ社内の Chef 利用について
20120118 titanium
20120118 titanium
プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話
【Xpages day2016】標準コントールを使わないxpage開発
【Xpages day2016】標準コントールを使わないxpage開発
Java女子部 Java EEハンズオン(応用編)
Java女子部 Java EEハンズオン(応用編)
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
Heroku java
Heroku java
Ähnlich wie 大阪Node学園八時限目 「expressで作るWebアプリ」
Vue.js で XSS
Vue.js で XSS
tobaru_yuta
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
Ext.direct
Ext.direct
Shuhei Aoyama
Koa.js_エンジニア勉強会20140328
Koa.js_エンジニア勉強会20140328
エンジニア勉強会 エスキュービズム
第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村
Koichi Uchimura
Using SockJS(Websocket) with Sencha Ext JS
Using SockJS(Websocket) with Sencha Ext JS
Kazuhiro Kotsutsumi
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
Daisuke Hiraoka
densan2014-late01
densan2014-late01
Takenori Nakagawa
JAWS-UG Meets Windows (JAWS Days 2017)
JAWS-UG Meets Windows (JAWS Days 2017)
Amazon Web Services Japan
ScalaMatsuri 2016
ScalaMatsuri 2016
Yoshitaka Fujii
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Kazumi Hirose
Windows Azure PHP Tips
Windows Azure PHP Tips
Microsoft Openness Japan
徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925
Yu Ito
Djangoフレームワークの紹介
Djangoフレームワークの紹介
Shinya Okano
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
shigeya
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
Atsuo Ishimoto
Ansible2.0と実用例
Ansible2.0と実用例
OSSラボ株式会社
2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門
miso- soup3
かんたん Twitter アプリをつくろう
かんたん Twitter アプリをつくろう
Shuhei Iitsuka
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
Akio Katayama
Ähnlich wie 大阪Node学園八時限目 「expressで作るWebアプリ」
(20)
Vue.js で XSS
Vue.js で XSS
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Ext.direct
Ext.direct
Koa.js_エンジニア勉強会20140328
Koa.js_エンジニア勉強会20140328
第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村
Using SockJS(Websocket) with Sencha Ext JS
Using SockJS(Websocket) with Sencha Ext JS
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
densan2014-late01
densan2014-late01
JAWS-UG Meets Windows (JAWS Days 2017)
JAWS-UG Meets Windows (JAWS Days 2017)
ScalaMatsuri 2016
ScalaMatsuri 2016
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Windows Azure PHP Tips
Windows Azure PHP Tips
徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925
Djangoフレームワークの紹介
Djangoフレームワークの紹介
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
Ansible2.0と実用例
Ansible2.0と実用例
2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門
かんたん Twitter アプリをつくろう
かんたん Twitter アプリをつくろう
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
大阪Node学園八時限目 「expressで作るWebアプリ」
1.
大阪Node学園八時限目 node.jsみちしるべ expressで作るWebアプリ 2013/10/26
2.
スライド内のリンクはクリックできます リンクはこの色です
3.
4.
5.
express
6.
expressとは Webアプリケーションフレームワーク http://expressjs.com/ sinatraライクなシンプルな構成 現状node.jsでのデファクトスタンダード デフォルトテンプレートエンジンはjade
7.
最新バージョンは 3.4.2 express 2.x
系とはいろいろ変わってます 大阪Node学園で取り上げるのも4回目になりました 過去の情報を参照する際はバージョンに注意してく さい 私のブログとかヹヹヹ
8.
expressのインスール 1 $ npm
install -g express 2
9.
プロジェクトの初期化 expressコボンドでプロジェクトを初期化します 1 $ express
handson expressの依存モジュールをインストール 1 $ cd handson 2 $ npm install これでexpressが立ち上がるようになっているので動かしてみる。 1 $ node app.js ブラウザで http://localhost:3000 にアクセスする。 "Error: listen EADDRINUSE" エラーで動かない場合は p.ecstacy app.jsをテキストエディタで開き 15行目のホート番号を3000な に変 更します。
10.
11.
サーバ側の処理の追加 ブラウザから
12.
サーバ側の処理の追加 Ctrl+C でサーバを停止し、サーバを再起動する。 1 $
node app.js 2 ブラウザで http://localhost:3000/hello にアクセスしてみる。 "hello"と表示されます。
13.
パスとイベントハンドラの追加の仕方 パスの追加 1 app.HTTPメソッ 名('ルー
か のURLパス', イベン ハン イベントハンドラの書き方 1 function(req, res){ //ここでユーザか の入力値を け 2 //ユーザに返す ータを作る 3 4 } 5 、 jQueryで 1 $('#top').on('click', function(){ //イベン ハン ング 2 3 }); と書くのと比較すると覚えやすいかと思います。 );
14.
テンプレートで値を表示 先ほ の app.get('/hello',
...); では直接文字列を返していましたが テンプレ ートを使ってHTMLを返すように変更してみます。 handson/views/ ディレクトリに hello.jade という新しいファイルを作って テキ ストエディタで開きます。 内容を次のように書いてく さい。 1 h1 こんにちは 2 p #{message} へようこそ 3 ここで作成したファイルは jade というテンプレートエンジン用のテンプレートファ イルです。
15.
テンプレートで値を表示 app.js の res.send('Hello',
...); の部分を次のように変更します。 1 app.get('/hello', function (req, res) { // res.send('Hello'); この行は削除する 2 res.locals.message = 'expressハンズオン'; 3 res.render('hello'); 4 5 }); 6 こんにちは expressハンズオンへようこそ と表示されます。 サーバを再起動してブラウザを再読み込みします。
16.
アプリケーションの自動リロード スクリプトを変更するたびに手動でサーバの再起動をしてきました。 開発中は変更後に自動で再起動されたほうが便利なので、ツールを使って自 動化します。 nodemonというモジュールを使います 1 $ npm
install -g nodemon 2 $ nodemon app.js app.jsファイルを保存し直すと、サーバが自動で再起動されます
17.
入力値の け取り クエリ引数編 ブラウザで
http://localhost:3000/hello?greeting=hoge を開きます。 hoge という文字列はま この hoge という文字列をページに表示してみます。 こにも表示されていません。 app.get('/hello', ...); を次のように変更します。 1 app.get('/hello', function(req, res){ res.locals.message = req.query.greeting; 2 res.render('hello'); 3 4 }); こんにちは hogeへようこそ と表示されます。 サーバを再起動して 再度ブラウザでアクセスします。
18.
入力値の け取り URLパラメータ編 次に
app.get('/hello') を次のように変更します 1 app.get('/hello/:greeting', function (req, res) { res.locals.message = req.params.greeting; 2 res.render('hello'); 3 4 }); 5 http://localhost:3000/hello/fuga サーバを再起動し ブラウザで を開くと fugaへようこそ と と表示されます。
19.
入力値の け取り URLパラメータ編 この状態で
http://localhost:3000/hello や http://localhost:3000/hello/ に アクセスするとエラーになるので 空のパラメータも け付けるようにするには :greeting? のようにパラメータの最 後に?をつけます。 :greeting がないときにデフォルトの値を表示するには 1 res.locals.message = req.params.greeting || ' フォル メッセージ'; 2 のようにします。
20.
入力値の け取り POSTデータ編 hello.jade
にフォームを追加します 1 form(action="/hello", method="post") input(type="text", name="greeting") 2 input(type="submit", value="送信") 3 テキストフィールドに moga と入力して送信ボタンを押します。 ブラウザをリロードするとフォームが表示されるので Cannot POST /hello というエラーになります。
21.
入力値の け取り POSTデータ編 app.get('/hello');
は変更せ 、その後に次のように書きます。 1 app.post('/hello', function(req, res){ res.locals.message = req.body.greeting; 2 res.render('hello'); 3 4 }); 5 今度はエラーになら に mogaへようこそ 表示されます。 サーバを再起動し 再度 フォームから値を送信してみます。
22.
GETとPOST app.get と app.post
は同じURLパスでも別の処理として記述します。 GET POST データの取得に使われるHTTPメソッド サーバにデータを送るときに使われるメソッド HTTPメソッドの種類に関係なく常に処理を実行したい場合は app.all() が使え ます
23.
jadeでテンプレートを継承する HTMLタグやHEADタグをすべてのテンプレートファイルに書くのは面倒なの で ひとつのファイルに書いた内容を他のファイルでも使うように変更します。 views/layout.jade ファイルがすでにあるので これを使ってみます。 テキストエディタで
layout.jadeを開き block contentの行の後に一行追加し ます。 1 block content イアウ 2 フォル コンテンツ
24.
jadeでテンプレートを継承する hello.jade をテキストエディタで開き いったんすべての内容を削除してから、 次のように変更します。 1
extends layout 2 ブラウザをリロードすると レイアウトデフォルトコンテンツ と表示されます。 extends layoutのあとに2行追加します 1 extends layout 2 block content h1 helloコンテンツ 3 4 layout.jade にある block content の内容を上書きしています。 ブラウザでアクセスすると helloコンテンツ と表示されます。
25.
アプリケーションワイドな値とブルパ 全てのビューで表示する値はあらかじめ設定しておくことができます。 app.js のルート設定の前に次の一行を追加します。 1 app.locals.title
= 'アプ ケーションワイ なサイ タイ ル'; 2 ブラウザをリロードして、ページのタイトルが変わっていることを確認します。 テンプレートで表示はしないが アプリケーション全体で共有したい設定値な は app.set() で設定し app.get() で参照します。 1 app.set('some_setting', 'some value'); 2 app.get('some_setting'); // some value が返る 3
26.
アプリケーションワイドな値とブルパ app.locals には次のように関数を設定することもできます。 1 app.locals.braced
= function(str){ return '[' + str + ']'; 2 3 } 設定した関数はテンプレート内でブルパメソッドとして呼び出すことができま す。 hello.jade でこのブルパを使ってみます。 1 p #{braced('カッコつき文字列')} 2
27.
セッション セッションを使うには app.js に設定を追加します。 20行目の 1
app.use(express.bodyParser()); の後に二行設定を追加します。 1 app.use(express.cookieParser()); 2 app.use(express.session({key: 'sess_id', secret: 'salt'})); 3 これでセッションが使えるようになりました。 express.sessionはデフォルトでメモリ上にセッション情報を保存するので実運 用には向きません
28.
セッション セッションが使えることを確認するために ダミーのログイン画面を作ってみましょう。 app.js にログイン画面用のルートを追加します。 1 app.get('/login',
function(req, res){ res.render('login'); 2 3 }); 4 views/login.jade を新規作成します。 1 extends layout 2 block content form(action="/login", method="post") 3 label ユーザ名 4 input(type="text", name="username") 5 input(type="submit", value="ログイン") 6
29.
セッション app.js にダミーのログイン処理を追加します。 1 app.post('/login',
function(req, res){ req.session.username = req.body.username; 2 res.redirect('/hello'); 3 4 }); 5 http://localhost:3000/hello でログイン名を表示できるようにします。 1 app.get('/hello', function(req, res){ res.locals.username = req.session.username; 2 res.render('hello'); 3 4 }); 5
30.
セッション hello.jade にヤーザ名表示を表示します。 1 p
としてログインしています。 2 ブラウザで http://localhost:3000/login にアクセスします。 ヤーザ名を入力してログインボタンをクリックすると /hello にリダイレクトされ 入力したヤーザ名としてログインしています と表示されます。
31.
イベントハンドラの分離 これまでにたくさんルートを追加して app.js が少し長くなったので イベントハンドラを別ファイルに分離してすっきりさせます。 新しいファイル
routes/handson.js をつくります。 app.js で今作成したファイルを読み込みます。 場所は app.get('/hello', ...); の前にします。 1 var handson = require('./routes/handson'); 2 app.get('/hello', ...); 3
32.
33.
イベントハンドラの分離 次に app.js と
routes/handson.js をつなげるため いま handson.js に貼りつけたイベントハンドラに名前をつけます。 routes/handson.js 1 exports.index = function(req, res){ res.locals.username = req.session.username; 2 res.render('hello'); 3 4 } 5 最後に 今名前をつけた関数を app.js で呼び出します。 app.js 1 app.get('/hello', handson.index);
34.
実行時の環境変数 サーバ実行時に環境変数を渡すことができます。 1 $ NODE_ENV=production
node app.js nodemonを使っている場合も同じです。 1 $ NODE_ENV=production nodemon app.js 2 スクリプト内では process.env で環境変数を参照できます。 app.js の最後に以下の一行を追加してみます。 1 console.log(process.env.NODE_ENV); コンソールの最後にproduction と表示されます。 process.env の代わりに app.get('env') でも同じ結果を得られます。 1 console.log(app.get('env'));
35.
入力値のエスケープ express-validatorというexpress用のミドルウェアがあるのでそれを使います https://github.com/ctavan/express-validator インストール 1 $ npm
install express-validator --save --saveオプションをつけておくとインストールしたパッケージがpackage.jsonに 自動で追加されます app.jsの先頭でモジュールを読み込んで、 ミドルウェアの組み込み bodyParserの後でミドルウェアを有効にします。 1 var validator = require('express-validator'); 2 (略) app.use(express.bodyParser()); 3 app.use(validator()); 4 5 (略)
36.
lessのコンパイル https://github.com/emberfeather/less.js-middleware less.js-middlewareをインストールします npm install less-middleware app.use(express.static)の前に入れる必要があります ミドルウェアを有効にします var
lessMiddleware = require('less-middleware'); (略) app.use(lessMiddleware({ dest: __dirname + '/public/css', src: __dirname + '/public/less', //force: true, compress: true })); app.use(express.static(__dirname + '/public')); (略)
37.
データを保存する 今回はMongoDBを使います MongoDBとは node.jsでは最初期からモジュールがある ドキュメント指向データベース いまやIBM御用達
38.
MongoDB用モジュール MongoDB用のモジュールは大量に有ります 一番有名なのはmongooseですが、 私には使いにくいので今回はmongo-native-driverを紹 します 非公式モジュールから公式モジュールに格上げされました
39.
mongo-native-driver https://github.com/mongodb/node-mongodb-native MongoDBのshellと同じような文法で書ける 多数のライブラリから利用されている インストール 1 $ npm
install mongodb --save
40.
モジュールの読み込みと初期化 MongoDBではDBとコレクション(テーブル)は自動で作成されます。 ファイルの前の方、モジュールのrequireをしている部分に以下のコードを追加 します。 1 var mongoClient
= require('mongodb').MongoClient; 2 var mongo = null; 3 続いて、ミドルウェア内でコネクションを初期化します 1 app.use(function(req, res, next){ mongoClient.connect('mongodb://127.0.0.1:27017/handson', 2 function(err, db) { 3 if(err) throw err; 4 mongo = db; 5 next(); 6 } 7 ); 8 9 });
41.
データの書き込み /helloにPOSTされたmessageをMongoDBに書き込んでみます。 1 app.post('/hello', function(req,
res){ var user_message = req.body.greeting; 2 var messages = mongo.collection('messages'); 3 messages.insert({message: user_message}, function (err, doc) { 4 res.locals.message = doc[0].message; 5 res.render('hello'); 6 }); 7 8 }); hello.jade に次の二行を付け足すと、 (入力したメッセージ)が保存されました と表示されます。 if message p が保存されました。
42.
データの読み出し /hello/list にアクセスした時に保存されたメッセージをすべて表示します app.jsに以下のコードを追加します。 1 app.get('/hello/list',
function (req, res) { var messages = mongo.collection('messages'); 2 messages.find().toArray(function (err, data) { 3 res.locals.data = data; 4 res.render('hello'); 5 }); 6 7 }); hello.jadeに以下のコードを追加します 1 h2 保存されたメッセージ 2 ul 3 each datum in data li= datum.message 4 ブラウザで http://localhost:3000/hello/list にアクセスすると保存したメッセ ージの一覧が表示されます。
43.
asyncを使ったフローコントロール フロー制御モジュール async https://github.com/caolan/async フローコントロールもたくさんモジュールがありますが、asyncが一番有名です。 並列実行、逐次処理、非同期処理の終了待ちな ができます。 フロー制御のほか、コレクションのイテレーションもできます。
44.
asyncのインストール インストール 1 $ npm
install async --save app.js 他のモジュールと同じように、app.jsの先頭でrequireしておきます。 1 var async = require('async');
45.
asyncの例 MongoDBで登録されたメッセージの総数と一覧を取得してみます。 1 app.get('/hello/list', function
(req, res) { var messages = mongo.collection('messages'); 2 async.parallel({ 3 total: function (callback) { 4 messages.count(function (err, count) { 5 callback(err, count); 6 }); 7 }, 8 list: function (callback) { 9 messages.find().toArray(function (err, data) { 10 callback(err, data); 11 }); 12 } 13 }, function (err, results) { 14 res.locals.data = results.list; 15 res.locals.total = results.total; 16 res.render('hello'); 17 }); 18 19 });
46.
asyncの例 3行目でasyncのパラレル処理を開始しています 3行目から14行目のparallelメソッドの第一引数がオブジェクトになっていま す 第一引数はオブジェクトか配列になります この第一引数に並列処理したい関数を渡します 第一引数内に置く関数にはデフォルトで関数が渡されます 処理が終了したらこの関数を呼び出して、明示的に終了を知らせます 全ての関数が終了すると14行目から18行目にある関数が呼び出されるの で、ここで結果を け取ります
47.
その他のフロー制御の方法 Promiseライブラリを使う方法 Qが有名です(た し遅い) BlueBirdという速いのが出ている generatorベースのライブラリを使う方法 node 0.12.xから 第六回のスライドの後半で取り上げました
48.
Q?
49.
Thank you! photo by
NeilGHamilton from flickr
50.
宣伝 HTML5とJavaScriptによるiPhone/Android両対応アプリ開発ガイド (DESIGN & WEB
TECHNOLOGY) 半年ほ 前に本を書きました
Jetzt herunterladen