前回、データベースのインストールを行ったので、今回はアプリケーションサーバの構築を行います。今回はExpressを利用します。Expressはnode上で動くWeb Applicationフレームワークです。日本語ドキュメントもあります。インストールはいたって簡単でnpm installで完了です。
Express - node Webフレームワーク | 日本語ドキュメンテーション
Expressを使ってみる
Expressのインストール
npm installで簡単にインストールできます。
$ npm install -g express
簡易アプリケーションの作成
サンプルアプリケーションを作り動かすことは用意です。次のコマンドを実行してください。
$ express ~/Projects/express-app && cd $_ … create : /Users/albatrosary/Projects/express-app/bin create : /Users/albatrosary/Projects/express-app/bin/www install dependencies: $ cd /Users/albatrosary/Projects/express-app && npm install run the app: $ DEBUG=express-app ./bin/www
$ $ npm install
アプリケーションの起動
作ったアプリケーションを実行します。
$ DEBUG=express-app ./bin/www
もしくは
$ npm start
以上でExpressのインストールおよびサンプルアプリケーションサーバの実装まで行いました。続いて今作成したアプリケーションサーバとmongoDBを連携させます。この連携にはmongooseを利用します。urlを「/users」とすると次の画面が表示されます。
ExpressとmongoDBを連携させる(mongooseの利用)
mongooseのインストール
インストールしたアプリケーションサーバのディレクトリで次のコマンドを発行します。package.jsonにmongooseが登録されているのが確認できます。
$ npm install mongoose --save
-- package.json { "name": "express-app", "version": "0.0.1", "private": true, "scripts": { "start": "node ./bin/www" }, "dependencies": { "express": "~4.2.0", "static-favicon": "~1.0.0", "morgan": "~1.0.0", "cookie-parser": "~1.0.1", "body-parser": "~1.0.0", "debug": "~0.7.4", "jade": "~1.3.0", "mongoose": "^3.8.13" } }
実装してみる
サンプルプログラムの中にroute/users.jsというファイルがあるのでここをカスタマイズします。前回作成したデータベース「mydb」に接続しコレクション「testdata」からレコードを抽出します。
-- route/users.js var express = require('express'); var router = express.Router(); var testData; var mongoose = require('mongoose'); // スキーマ型定義 var schema = mongoose.Schema({ name: String }) // フォーマット「mongodb://[hostname]/[データベース名]」 mongoose.connect('mongodb://localhost:27017/mydb'); var db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error:')); db.once('open', function callback () { console.log("Connected to 'mydb' database"); // アクセスするコレクションを指定 testData = mongoose.model('testData', schema); }); router.get('/', function(req, res) { testData.find({}, function(err, results) { console.log(testData); if (err) { res.send({'error': 'An error has occurred'}); } else { console.log('Success: ' + JSON.stringify(results)); res.json(results); } }); }); module.exports = router;
注意事項ですが、mongoクライアントで発行したコレクション名とmongooseで定義したコレクション名が異なることに注意が必要です。mongooseで定義した「testData」はmongoDBにアクセスするときの名前は「testdatas」になっていることに注意してください。つまり、すべて小文字になり最後に「s」が付与されます。ログを出力してますので参考までに。
結果は以下の通りです。