2011-12-30 95 views
2

在这个问题上我一直在桌子上撞了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

+0

只是一个快速通知,你不应该'User.static.removeByDeviceToken = removeByDeviceToken'? – alessioalex 2011-12-30 21:43:23

+0

感谢您的建议。说实话,我不太确定。我已经看到它使用这种方式,它似乎工作xD。在这种情况下该方法被称为好的。 – 2011-12-30 22:17:26

+0

请发表您自己的回答,然后接受。注意忘记调用next()或忘记将错误传递给成功回调函数。 – 2012-03-15 05:14:12

回答

4

经过几天的测试,事实证明这个问题是因为在中间件中我定义了删除,我忘记调用next()函数。 facepalm

+0

我面临与删除方法相同的问题,我的文档正在从数据库中删除,但回调没有解雇。 – 2014-05-02 05:56:06

相关问题