我正在使用Restify和Mongoose为NodeJS构建API。在找到用户并验证其密码后,在下面的方法中,我试图在将响应发送回用户之前保存一些登录信息。问题是响应将永远不会返回。如果我将响应置于保存调用之外和之后,则数据永远不会持久保存到MongoDB。难道我做错了什么?过去两天我一直在努力,帮助会很棒。
login: function(req, res, next) {
// Get the needed parameters
var email = req.params.email;
var password = req.params.password;
// If the params contain an email and password
if (email && password) {
// Find the user
findUserByEmail(email, function(err, user) {
if (err) {
res.send(new restify.InternalError());
return next();
}
// If we found a user
if (user) {
// Verify the password
user.verifyPassword(password, function(err, isMatch) {
if (err) {
res.send(new restify.InternalError());
return next();
}
// If it is a match
if (isMatch) {
// Update the login info for the user
user.loginCount++;
user.lastLoginAt = user.currentLoginAt;
user.currentLoginAt = moment.utc();
user.lastLoginIP = user.currentLoginIP;
user.currentLoginIP = req.connection.remoteAddress;
user.save(function (err) {
if (err) {
res.send(new restify.InternalError());
return next();
}
// NEVER RETURNS!!!!
// Send back the user
res.send(200, user);
return next();
});
}
else {
res.send(new restify.InvalidCredentialsError("Email and/or password are incorrect."));
return next();
}
});
}
else {
res.send(new restify.InvalidCredentialsError("Email and/or password are incorrect."));
return next();
}
});
}
else {
res.send(new restify.MissingParameterError());
return next();
}
},
答案 0 :(得分:1)
此问题的一个原因可能是您有pre save hook
无效的错误。
如果您发现模型为.pre('save' () => {...})
函数,则在调用save
后再次检查此方法,并且返回时没有错误。
可以找到关于mongoose中间件的文档here