【課題】
JS好きーなのにmongo(もはや遅い)をちゃんとアプリケーションで使ったことなかったので、とりあえずやっとかなきゃな、という。
nodejs、npm、express入ってる前提でいきます。express入れるまでの記事はこちら
【記録】
1. まずmongodbを入れる
% cd % sudo apt-get install mongodb
確認
% mongo --version MongoDB shell version: 1.4.4
2. 次にmongoose入れる
mongooseとは
Mongoose は非同期環境において機能することを目的とした MongoDB のオブジェクトモデリングツールです。
だそうです。
参考
Mongoose
Mongoose - デベロッパーズガイド 日本語訳
ということで
% npm install mongoose
確認
% npm list | grep mongoose
3. ちょっと寄り道:expressで最小限のウェブサーバ立てる
/** * minimum.js **/ // create app by express var express = require('express'); var http = require('http'); var app = express(); app.configure(function(){ app.set('port', 8000); }); // define routing app.get('/',function(request,response){ response.send({'田井中':'律'}); }); // listen http.createServer(app).listen(app.get('port'), function(){ console.log('listening on ' + app.get('port')); });
うごかす
% node minimum.js listening on 8000
これで、サーバの8000ポート/にアクセスするとブラウザ上で
{ '田井中' : '律' }
と表示されるようになりました
4. mongooseをつかってsaveとfindする
上記のminimum.jsをちょっとだけいじってmongooseでmongodbを操作してウェブアプリっぽくする
/** * minimum.js **/ /********** for mongoose **********/ var mongoose = require('mongoose'); var db = mongoose.createConnection('mongodb://localhost/test');// define schema var mouseSchema = new mongoose.Schema({ name : String, age : Number, is_pockemon : Boolean, }); // create object var Mouse = db.model('Mouse', mouseSchema); /*********************************/ // create app by express var express = require('express'); var http = require('http'); var app = express(); app.configure(function(){ app.set('port', 8000); }); app.get('/save',function(request,response){ // define data var tom = new Mouse({ name : 'Tom', age : 72, is_pockemon: false, }); var mickey = new Mouse({ name : 'Mickey', age : 84, is_pockemon: false, }); var picachu = new Mouse({ name : 'ぴかちゅー', age : 16, is_pockemon: true, }); // save to mongodb tom.save(); mickey.save(); picachu.save(); response.send({'message' : '保存したよん'}); }); app.get('/find',function(request,response){ // find from mongodb Mouse.find(function(err, mice){ if(err) console.log(err); response.send(mice); }); }); // listen http.createServer(app).listen(app.get('port'), function(){ console.log('listening on ' + app.get('port')); });
まずデータ構造のひな形であるSchemaを定義する(Mouse)。
で、/saveでアクセスきたら、それを元に実際のデータをつくっていく(tomとかmickeyとかpicachuとか)。
一方、/findでアクセス来たら、Mouseスキーマの中のものを取ってきて返す。
なんか超ざっくりMySQL的に理解するなら、
Schema -> テーブルとかテーブル構成とか
Schemaのインスタンス -> テーブルのrowひとつ分みたいな感じなのかな。
ブラウザで /saveにアクセスすると、
で、/findでアクセスすると、
なるほどなるほど。いけてるじゃん。
【雑感】
今動かしてるサービスは node.js + mysql で十分事足りてるので、あえてmongoDBでやる必要性は無いのだけれど、JS好きーとしてコレはやっとかないといけないなあと思ったのでやった。
素人を脱出すべくもがき続け、ちょっとずつ技術的なことが分かってくるにつれて、分かり易いドキュメントを書くということ自体にも楽しさを感じつつある。
DRY