我在routes.js
文件中有两个重定向:
app.get('*', blockingController01);
app.get('/test', controller02);
业务是,我有一个“阻止登录页面”,您必须在其中输入有效代码才能访问该网站的其余部分。 blockingController01
发送带有表单的呈现页面以输入代码。如果用户没有输入正确的代码,那么如果他/她输入'/ test'或任何其他页面应该重定向到insert code
页面。
我试图解决这个问题,只是在开头为代码页放置一个控制器,并用通配符*覆盖所有路径。所以我想知道两件事:
谢谢!
答案 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()
,它将请求传递给第二个路由处理程序。