可以't使用node.js管理重定向

Can't manage redirect with node.js

本文关键字:node js 管理 重定向 使用 可以      更新时间:2023-09-26

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

下面的文件是主控制器:

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

这是Routes文件:

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

并且节点:

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

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

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

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