私はアプリケーションと呼ばれるモデルを持っています:
var ApplicationSchema = new mongoose.Schema({
name : {type: String, validate: [uniqueName, 'Unique Name']},
dateCreated: Date,
containers : [ContainerSchema]
});
mongoose.model('Application', ApplicationSchema);
var Application = database.model('Application');
保存時に uniqueName という検証関数を呼び出します。
function uniqueName(name)
{
console.log('In Unique Name function');
Application.find({}, function(error, documents) {
for(var i = 0; i < documents.length; i++) {
if(documents[i].name == name) {
console.log('About to return false');
return false;
}
}
});
return true;
}
コードの後半で、モデルにいくつかのデータを入れて保存します。
newApplication.name = request.body.name;
newApplication.save(function(error) {
console.log('Callback for save');
if(error) {
console.log('error if statement');
response.statusCode = 409;
response.end();
}
console.log('Done with callback');
});
response.statusCode = 201;
response.end();
一意ではない名前でこれをテストすると、201 応答が返され、端末から次の出力が表示されます。
In Unique Name function
Callback for save
Done with callback
About to return false
私は何か間違ったことをしていますか、それともこれは本当にMongooseの競合状態ですか?