mongooseの糞サンプル
model/post.js
var Mongoose = require('mongoose'); var mongoose = new Mongoose.Mongoose(); var db = mongoose.connect('mongodb://localhost:27017/db_name'); var Schema = Mongoose.Schema; var ObjectId = Schema.ObjectId; var Tag = new Schema({ name : { type : String, default : '' } }); var Post = new Schema({ title : { type : String, required : true }, msg : { type : String, required : true }, posted_at : { type : Date, default : Date.now }, view_counter : { type : Number, required : true }, tag : [Tag] }); mongoose.model('Post', Post, 'Post', false); module.exports = db.model('Post');
dao/post.js
var EventEmitter = require('events').EventEmitter; var Post = require('../model/post'); // path to post.js var dao = exports.dao = { save : function(query){ var ev = new EventEmitter(); var post = new Post(query); post.save(function(error){ if(error){ console.log('save_log:', error); ev.emit('error'); }else{ ev.emit('end', post); } }); return ev; }, find_by_id : function(id){ var ev = new EventEmitter(); Post.findById(id, [], {}, function(error, post){ if(!error && post){ ev.emit('end', post); }else if(!error){ ev.emit('end', []); }else{ console.log('find_by_id_log:', error); ev.emit('error'); } }); return ev; }, find : function(query, options){ var ev = new EventEmitter(); Post.find(query, [], options, function(error, posts){ if(!error && posts){ ev.emit('end', posts); }else if(!error){ ev.emit('end', []); }else{ console.log('find_log:',error); ev.emit('error'); } }); return ev; }, update : function(id, query){ var ev = new EventEmitter(); Post.update({ _id : id }, query, function(error){ if(error){ console.log('update_log:', error); ev.emit('error'); }else{ ev.emit('end'); } }); return ev; }, remove : function(id){ var ev = new EventEmitter(); Post.remove({ '_id' : id }, function(error){ if(!error){ console.log('remove_log:', error); ev.emit('end'); }else{ console.log(error); ev.emit('error'); } }); return ev; } };
service/post.js
var EventEmitter = require('events').EventEmitter; var post_dao = require('../dao/post').dao; // path to post.js var service = exports.service = { find : function(query){ var ev = new EventEmitter(); var searching_posts = post_dao.find(query); searching_posts.on('end', function(posts){ if(posts.length > 0){ ev.emit('end', posts); }else{ ev.emit('error') } }); searching_posts.on('error', function(){ ev.emit('error'); }); return ev; }, // 以下同様 };
mongooseはソースも使い勝手もよい。GridFSはサポートする気ないらしい。