Express中的路由处理程序是同步调用还是异步调用?

时间:2016-07-05 18:06:16

标签: node.js express routing

我在routes.js文件中有两个重定向:

app.get('*', blockingController01);
app.get('/test', controller02);

业务是,我有一个“阻止登录页面”,您必须在其中输入有效代码才能访问该网站的其余部分。 blockingController01发送带有表单的呈现页面以输入代码。如果用户没有输入正确的代码,那么如果他/她输入'/ test'或任何其他页面应该重定向到insert code页面。

我试图解决这个问题,只是在开头为代码页放置一个控制器,并用通配符*覆盖所有路径。所以我想知道两件事:

  1. 处理相同路径的控制器是异步调用的吗?
  2. express是否有必要避免调用其余的控制器?
  3. 谢谢!

1 个答案:

答案 0 :(得分:1)

控制器(路由处理程序)不会同时被称为 (我认为你的意思是"异步")。

按照定义的顺序调用它们,因此在您的情况下,blockingController01将调用所有GET个请求。

如果令牌正确,该控制器可以将请求传递给与URL匹配的其他路由处理程序。

这是您尝试做的一个非常基本的例子:

app.get('*', (req, res, next) => {
  if (req.query.token !== '12345') {
    // You would use `res.render()` here, this is just a quick demo:
    return res.send(`
      <form>
      Please enter a token and press enter: <input type=text name=token>
      </form>
    `);
  }
  next();
});

app.get('/test', (req, res) => {
  res.send('<h1>Correct token!</h1>');
});

因此任何GET请求都会遇到第一个路由处理程序,它会检查令牌的有效性(在这种情况下,它只检查查询字符串参数token的值是否为 &#34; 12345&#34; 。如果没有,它将呈现一个表单,但如果令牌匹配,它将调用next(),它将请求传递给第二个路由处理程序。