在这个问题上我一直在桌子上撞了2个小时,而我似乎无法找到解决方案。Mongoose query.remove()回调没有被调用
这里的问题代码:
/* Users */
var mongoose = require("mongoose");
var User = new mongoose.Schema({
a: String,
d: String
});
var removeByDeviceToken = function(device_token, callback) {
this.findOne({ d: device_token }, function(error, user) {
if (error) {
callback(error);
} else if (user) {
user.remove(function(error) {
callback(error);
});
} else {
callback(new Error("No users with that device token were found."));
}
});
};
User["static"]("removeByDeviceToken", removeByDeviceToken);
mongoose.model("User", User);
的问题是很简单,对于user.remove回调()不会被调用。 (用户本身也没有被移除。)
谢谢!
编辑:经过一些更多的测试后,看起来我已经定义了用于删除的中间件被调用。我在MongoHQ上托管数据库也可能是相关的。
编辑#2:经过几天的测试,事实证明这个问题是因为在我定义的删除中间件中,我忘了调用next()函数。 facepalm
只是一个快速通知,你不应该'User.static.removeByDeviceToken = removeByDeviceToken'? – alessioalex 2011-12-30 21:43:23
感谢您的建议。说实话,我不太确定。我已经看到它使用这种方式,它似乎工作xD。在这种情况下该方法被称为好的。 – 2011-12-30 22:17:26
请发表您自己的回答,然后接受。注意忘记调用next()或忘记将错误传递给成功回调函数。 – 2012-03-15 05:14:12