尝试使用Restify API中的Mongoose保存模型时,响应将不会返回

时间:2012-10-19 12:22:37

标签: node.js mongodb mongoose restify

我正在使用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();
        }
    },

1 个答案:

答案 0 :(得分:1)

此问题的一个原因可能是您有pre save hook无效的错误。

如果您发现模型为.pre('save' () => {...})函数,则在调用save后再次检查此方法,并且返回时没有错误。

可以找到关于mongoose中间件的文档here