【问题标题】:Node.js and Express.js Error : Can't set headers after they are sentNode.js 和 Express.js 错误:发送后无法设置标头
【发布时间】:2015-09-08 23:21:59
【问题描述】:

我是节点领域的新手,我有一个像下面这样的情况,我首先想设置一个 cookie,然后重定向到其他 url。但我得到了错误 - Unhandled rejection Error: Can't set headers after they are sent

user_details = [req.body.user_name, req.body.user_email, req.body.user_contact, req.body.route_id];
var user_details_str = JSON.stringify(user_details);
res.cookie('user_details', user_details_str, {maxAge : 7 * 24 * 3600000, httpOnly:false});
res.redirect('/route1');

我浏览了这个Node.js Error: Can't set headers after they are sent 并了解到res.redirect() 正在尝试重写标头但不知道如何解决此问题。

编辑:完整代码。

router.post('/register', encryptor.encryptUserPassword, function(req, res, next) {
  req.body.confirmed = false;

  Models.users.create(req.body).then(function(user) {


    user_details = [req.body.user_name, req.body.user_email, req.body.user_contact, req.body.route_id];
    var user_details_str = JSON.stringify(user_details);
    res.cookie('user_details', user_details_str, {maxAge : 7 * 24 * 3600000, httpOnly:false});

    user.user_pass = '';
    sess = res.session;
//    sess.email = user.user_email;
    Models.user_ride.create({user_id:user.user_id,route_id:req.body.route_id}).then(function(userroute){
        res.send(user);
    });

    res.redirect('/route1');
  }).error(function(err) {
    res.send(err);
  }).catch(Sequelize.ValidationError, function(err) {
    res.send(err);
  });
});

【问题讨论】:

  • 您发布的代码没有问题,所以我猜您没有显示所有相关代码。
  • 试试return res.redirect('/route1');
  • @robertklep 在编辑中发布了完整的代码。

标签: javascript node.js http cookies express


【解决方案1】:

问题出在这部分:

Models.user_ride.create({user_id:user.user_id,route_id:req.body.route_id}).then(function(userroute){
    res.send(user);
});

res.redirect('/route1');

你们都使用res.send() 发送响应 使用res.redirect() 执行重定向。您需要选择其中一个。

【讨论】:

    猜你喜欢
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多