【问题标题】:Error: Can't set headers after they are sent错误:发送后无法设置标头
【发布时间】:2013-12-22 16:16:40
【问题描述】:

我正在尝试执行登录功能,但Error: Can't set headers after they are sent 一直显示在我的终端中,根据我的理解,此错误是由res 引起的,但我在我的代码中找不到该错误.. 这是我目前所拥有的:

登录功能

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);
                });
           }
        });
    }

验证登录功能

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】:

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

    • 一次来自validateUserDoc
    • 一次来自process.nextTick 回调(那部分似乎是一些遗留代码);

    【讨论】:

      猜你喜欢
      • 2018-06-08
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      • 2017-12-22
      • 2015-08-10
      • 2018-09-02
      相关资源
      最近更新 更多