错误:发送后无法设置标头

问题描述 投票:-1回答:1

我正在尝试做一个登录功能但是Error: Can't set headers after they are sent会一直显示在我的终端中,基于我的理解这个错误是由res引起的,但是我在代码中找不到错误..这就是我到目前为止所拥有的:

login function

this.handleLoginRequest = function(req, res, next) {
        "use strict";
        var data = req.body;

        users.validateLogin(data, function(err, user) {
            "use strict";
            if(err) {
            res.send(400, err.message);
            }else{
                sessions.startSession(data, function(err, session_id) {
                            "use strict";
                    if (err) return next(err);
                            res.cookie('session', session_id);
                            res.send(200);
                });
           }
        });
    }

validateLogin function

this.validateLogin = function(data, callback) {
        "use strict";

        // Callback to pass to MongoDB that validates a user document
        function validateUserDoc(err, user) {
            "use strict";

            if (err) return callback(err, null);

            if (user) {
                if (bcrypt.compareSync(data.password, user.password)) {
                    callback(null, user);
                } else {
                    callback(new Error("Invalid password/email"), null);
                }
            }else{
                // no such user error 
                    callback(new Error("no such user"), null);
            }

        }

        users.findOne({ '_id' : data.email }, validateUserDoc);
        process.nextTick(function() {
                callback(null, data);
              });
    }
javascript node.js express
1个回答
0
投票

看起来传递给validateLogin的回调被调用两次:

  • 一次来自validateUserDoc;
  • 一次来自process.nextTick回调(那部分似乎是一些遗留代码);
© www.soinside.com 2019 - 2024. All rights reserved.