【问题标题】:Can't manage redirect with node.js无法使用 node.js 管理重定向
【发布时间】:2015-11-20 18:20:15
【问题描述】:

下面的代码有一个新错误。我想做的是建立一个简单的登录系统,但是我在重定向res.redirect('/example') 时遇到了问题。 当我尝试重定向用户时,console.log 说标头已经发送。我知道还有其他类似的问题,但我无法解决这个问题。请帮忙

下面的文件是主控制器:

exports.login = function(req, res){
  var email = req.body.email,
      password = req.body.password;

      User.findOne({email: email, password: password}, function(err,obj) {
      if(obj){

        console.log(obj);
          console.log('Access approved');
            req.session.regenerate(function(){
            console.log('New session printed to Sessions DB'); 
            req.session.email = email;
            res.redirect('/sec');
          });
      } else if(!email || !password){
        console.log('Please insert data');
      }else if(err){
        console.log('Error');
        req.session.regenerate( function(){
          req.session.msg = err;
          res.redirect('/login');
        });
      } else {
        console.log('errore not authenticated user');
          req.session.msg = err;
          res.redirect('/login');
      }

     });

   };

这是路由文件:

app.post('/logUser', users.login)

还有节点:

app.use('/login', function(req, res) {
    res.sendFile('public/login.html', {root: __dirname });
});

【问题讨论】:

  • 您能否准确地发布正在记录到控制台的内容?
  • 是的,但在我的控制台上,我只能看到这个“错误:发送后无法设置标题。”
  • 当您在发送 res 对象后尝试对其进行操作时,通常会发生该错误。通过调用sendFileredirect,您正在发送它。确保你的代码只做这些事情之一,而不是两者兼而有之。您可以在使用 res 执行的每个操作之前放置日志,以检查两者是否都被命中

标签: javascript node.js redirect


【解决方案1】:

好的,我终于找到了解决方案,而且非常简单。 我需要将next(); 添加到节点文件中,如下所示:

app.use('/login', function(req, res, next) {
    res.sendFile('public/login.html', {root: __dirname });
    next();
});

可能是因为设置next我可以更改已经发送的标头,最后我可以使用res.redirect再次重置它

【讨论】:

  • 谢谢大家的支持!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-07
  • 2018-09-20
  • 1970-01-01
相关资源
最近更新 更多