mongooseのmodelつくるところではまった
このコードはエラる。mongooseのバージョンは1.6.0。
var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/mydb', function() { var UserSchema = new mongoose.Schema({ name: { type: String, unique: true } }); mongoose.model('User', UserSchema); mongoose.disconnect(); });
コード追ってみたら mongoose.model('User', UserSchema) の内部でindex作る処理が非同期で走るんだけど、それが実行される前にdisconnectが先に実行されちゃうからみたい。でもmodelメソッドがコールバックとらないのでちと困った。考えた対応策は二つ。
一つ目はindexをつくる処理をとめる方法。
mongoose.model('User', UserSchema, true);
model.init(index作る処理)をスキップするかどうかを指定できるのでそれでとめる。こういう処理書くときってテストとかCLIのスクリプトがほとんどなので、そのときはindexつくる処理いらないかなという判断。
二つ目は、indexつくったときに emit('index') されてるので
mongoose.model('User', UserSchema).on('index', function() { mongoose.disconnect(); });
とかしちゃう。でもこれSchemaがindexつくらないSchemaだったらイベントが発火しないのでmodel.schema.indexes.lengthとかを見て判断する必要があるっぽい。あとこれだとSchemaいっぱいのときめんどい。