expressjs条件重定向

expressjs conditional redirect

本文关键字:重定向 条件 expressjs      更新时间:2023-09-26

我正在尝试编写用于身份验证的中间件。如果用户没有登录,我希望这个if语句将用户重定向到'/'。如果他们登录了,我不希望将他们重定向到'/news'。

/*Simplified for this example*/
if(rs.authenticated === true) {
    next();
} else {
    res.redirect('/');
}

有没有一种方法可以在这些if语句中做到这一点?还是我必须写一个新方法?我已经尝试了几种if语句的方法,但我只得到重定向循环。

标准模式适用于所有需要登录用户使用中间件的页面,该中间件验证登录用户,并在未登录时重定向到/

function loggedIn(req, res, next) {
  if(req.authenticated === true) {
    next();
  } else {
    res.redirect('/');
  }
}
app.get('/news', loggedIn, newsRoute);
app.get('/', homeRoute);

你的问题是,当你真的只想将中间件用于受保护的路由时,你正在为所有路由使用中间件,这就是你的重定向循环发生的地方。如果您想将登录用户发送到"/news"而不是"/",您可以只呈现正确的模板,也可以在其中进行条件重定向。

function homeRoute(req, res) {
  if (req.authenticated) {
      return res.redirect('/news');
  }
  res.render('home');
}

您想要引入一个小型中间件来检查用户是否登录。您可以在路由处理程序级别上设置它。

请参阅SO的答案:

javascript node.js next()

Express/Connect中间件是如何工作的?

参数";下一个";用于Express?