错误:发送后无法设置标题 [英] Error: Can't set headers after they are sent

查看:37
本文介绍了错误:发送后无法设置标题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试执行登录功能,但是错误:在发送标头后无法设置标头一直显示在我的终端中,基于我的理解,此错误是由 res ,但我在代码中找不到错误.这是我到目前为止的内容:

I'm trying to do a login function but the Error: Can't set headers after they are sent is keep showing up in my terminal, based on my understanding this error is causing by res but I can't find the error in my code.. this is what I have so far:

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函数

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

推荐答案

传递给 validateLogin 的回调似乎被调用了两次:

It looks like the callback passed to validateLogin is called twice:

  • 一次来自 validateUserDoc ;
  • 一次来自 process.nextTick 回调(该部分似乎是一些剩余的代码);
  • once from validateUserDoc;
  • once from the process.nextTick callback (that part seems to be some left-over code);

这篇关于错误:发送后无法设置标题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆