如何在节点js中使用express重定向后app.get

时间:2017-02-20 03:46:54

标签: node.js express redirect get

我是节点js的新手,这是我的问题。

我在app.js中将代码设置为从登录页面登录后重定向,如下所示

app.post('/login', function(req, res, next) {
passport.authenticate('local-login', function(err, user, info) {
  if (err) { return next(err); }
  if (!user) { return res.redirect('/login'); }
  req.flash("email");
  var email_address = req.body.email;
  var username = email_address.substring(0, email_address.lastIndexOf("@"));
  global_username = username;
  return res.redirect('/status.html'+'?channel='+username);
  })(req, res, next);
});

现在我想通过app.get获取'/status.html'+'?channel='+username

所以我创建了这样的代码,

app.get('/status.html?channel='+ global_username, isLoggedIn, function(req, res){
  console.log("Logged in");
  var chk_username = req.body.email;
  var temp = chk_username.substring(0, chk_username.lastIndexOf("@"));
  if(temp != global_username){return res.json({success: false, message:"Unauthorized Attempt"});}
});

然而,它没有通过那个app.get函数..我试图通过使用console.log检查它是否已登录,但没有出现任何内容。

有人有想法解决这个问题吗?

谢谢。

2 个答案:

答案 0 :(得分:2)

好的,首先,如果您使用global_username作为实际的全局变量,这不是一个好主意。这意味着每当有人登录时,每个人的价值都会发生变化。我不认为这就是你想要的。

此外,你的路线根本不应该包含查询字符串;这通常不是路由的一部分,只是路径的东西。坦率地说,我甚至没有遵循你在该功能中所做的事情,但另一件你应该知道的是,获取请求中没有正文,所以即使你点击这个中间件,你不会从req.body获得一个值。

如果您尝试做的只是重定向到网址,然后可以访问当前用户,那么护照会在您的req对象中为您设置,所以您可以这样做:

app.get('/status.html, isLoggedIn, function(req, res){
  console.log("Logged in");
  if (req.user) return res.send({message: 'Success'});
  return res.status(401).send({message: 'you are not logged in'});
});

答案 1 :(得分:0)

您可以这样做:

app.post('/login', (req, res, next) => {
  passport.authenticate('local-login', function(err, user, info) {
    if (err) return next(err);
    if (!user) return res.redirect('/login');
    req.flash("email");
    var email_address = req.body.email;
    var username = email_address.substring(0, email_address.lastIndexOf("@"));
    global_username = username;
    console.log("Logged in");
    var chk_username = req.body.email;
    var temp = chk_username.substring(0, chk_username.lastIndexOf("@"));
    if(temp != global_username){
      res.json({success: false, message:"Unauthorized Attempt"});
    }       

    return res.redirect('/status.html'+'?channel='+username);
  })(req, res, next);
});

res.redirect函数结束服务器和客户端之间的连接。因此,它不会达到对其发出的其他路由请求。基本上,您希望在函数内执行代码,而无需二次调用。您仍然可以为此给定实例之外的调用实现GET路由。