2016-07-05 34 views
0

我有一个routes.js文件中的两个重定向:快速路由处理程序是同步还是异步调用?

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

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

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

  1. 控制器处理相同的路径异步调用?
  2. 表达是否有东西可以避免调用控制器的其余部分?

谢谢!

+0

如所陈述通过下面的答案,他们按照您定义的顺序处理在你的代码中使用,但是你可以使用中间件来施加先决条件。看一看Route Handlers(http://expressjs.com/en/guide/routing.html),在其中使用'next'将控件传递给下一个函数。 – bpinhosilva

回答

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具有“12345”的值,如果没有,它将呈现一个形式,但如果令牌匹配,它将调用next(),其将请求传递到所述第二路由处理器。

+0

非常感谢,就像我想象的那样,那么在代码干扰中一定还有别的东西(代码暴露的是简化的代码)。再次感谢。 – R01010010

相关问题