2013年10月9日水曜日

Node.js+MongoDB+ExpressでWeb APIをシンプルに

Node.jsでWeb APIを作りたいときは、データベースにはMongoDBを使い、MVCフレームワークにはExpressを使えば簡単です。


まずはMongoDBのインストールが必要です。MondoDBのサイトから本体をダウンロードしてください。
ダウンロードした圧縮ファイルを適当な場所に解凍したら、ターミナルから次のように実行します。

c:\mongodb\bin\mongod.exe --dbpath d:\mongodb\data

見てのとおり、これはWindows版MongoDBの使用例ですが、これで mongod (MongoDBのデーモン) が立ち上がります。
d:\mongodb\data はデータファイルの置き場所です。
MongoDBの準備はたったのこれだけです。

では、いよいよMongoDB+Expressなサンプルアプリのソースコードを見てみましょう。

package.json
{
  "name": "example-app",
  "description": "an example using 'mongoDB' on 'Express'",
  "version": "0.0.1",
  "private": true, /* 誤って公開してしまうことを防ぎます */
  /* 依存関係 */
  "dependencies": {
    "express": "3.x", /* Express */
    "mongodb": "*", /* MongoDB */
    "mongoose": "*" /* MongoDB Object Modeling Tool */
  }
}

server.js
var express = require('express');
var mongoose = require('mongoose');
 
var app = express();

// connect to mongodb.
mongoose.connect('mongodb://localhost/mydata');

// define a schema.
var kittySchema = mongoose.Schema({
  name: String
});
// define a method to the schema.
kittySchema.methods.speak = function () {
  var greeting = this.name
    ? "Meow name is " + this.name
    : "I don't have a name"
  console.log(greeting);
};

// create a model.
var Kitten = mongoose.model('Kitten', kittySchema);

/* define routings. */

app.get('/save/:name', function(req, res) {
  var message = null;
  // create a new Kitten instance.
  var kitten = new Kitten({ name: req.params.name });
  // save a kitten.
  kitten.save(function (err, object) {
    if (err) {
      message = { message: err };
    } else {
      message = { message: object.name + ' saved!' };
    }
    res.send(message);
  });
});

app.get('/find', function(req, res) {
  var message = null;
  // find all kittens.
  Kitten.find(function (err, kittens) {
    if (err) {
      message = { message: err };
    } else {
      message = kittens;
    }
    res.send(message);
  });
});

app.get('/remove', function(req, res) {
  // remove all from mongodb.
  Kitten.remove({}, 
    // onsuccess
    function () {
      res.send({ message: 'All kittens removed.'});
    },
    // onerror
    function (err) {
      res.send({ message: err });  
    });
});

 
app.listen(3000);
console.log('Listening on port 3000...');

MongoDBもExpressもとてもシンプルなフレームワークなので、初めての方でも大まかに理解できると思います。

モデル
Kittenとは "name" というたった一つのプロパティを持つKittySchemaから作られた単純なモデルです。Kittenモデルは、それ自体が save() や find() などを持った、いわゆるアクティブオブジェクトです。

URIルーティング
app.get(...) ではURIルーティングを定義しています。これはExpressフレームワークの機構です。

では、サンプルアプリを実行してみましょう。
と、その前にアプリに必要モジュールをインストールする必要があります。ターミナルからソースコードを置いたフォルダに移動して、下のようにコマンドを入力してください。

$ npm install

package.json にもとづいて、アプリに必要なモジュールがインストールされました。
では、今度こそサンプルアプリを起動してみましょう。

$ node server.js
Listening on port 3000...

アプリが起動したら、ブラウザから下記のURLを順番に叩いてみて下さい。Kittyモデルの登録、検索、削除が確認できるはずです。レスポンスはWeb APIによくありがちなJSONオブジェクトです。

http://localhost:3000/save/Mike
http://localhost:3000/save/Tama
http://localhost:3000/find
http://localhost:3000/remove
http://localhost:3000/find

0 件のコメント:

コメントを投稿