如何跳过或跳过中间件?(节点)
How to skip or jump middleware? (node)
给定两个中间件,如何添加首先被击中的东西,然后确定将请求传递给哪个中间件。请求只能删除或转发到其中一个中间件,而不能同时删除或转发到两个中间件。
app.use( function *(next) {
if (isAuthenticated)
*private middleware*
else
*use public middleware*
});
更具体地说:
我有一个主页/
应该有一个可变的响应,具体取决于用户是否登录(在此处使用基于令牌的身份验证(。为简单起见,如果请求用户没有令牌,则public.html
是private.html
带有有效令牌的请求时的响应。
现在,这很容易在一个函数中实现,但我希望有单独的路由器,这将使代码更易于管理。
所以我需要以某种方式能够选择请求正确的中间件路由器?不知道该怎么做。
var publicR = new router();
publicR.get('/', function *(next) {
....public.html....
});
var privateR = new router();
privateR.get('/', function *(next) {
....private.html....
});
app.use(function(){
if(isAuthenticated)
...use privateR.routes();
else
...use publicR.routes();
});
首先,在登录或未登录时为给定 URL 呈现完全不同的内容是不寻常的,真的不是一个好主意。 因此,尝试让两个不同的路由器都服务于相同的路由,但一个用于登录用户,另一个用于未登录用户可能不是一个好的设计理念。
更常见的情况是页面的一部分在登录时可能有所不同。 在这种情况下,您有一个单一的路由来创建页面,该页面处理在登录或不登录时对内容执行略有不同的操作。
如果您真的想在登录时拥有完全不同的内容和行为,那么您可能应该在登录时重定向到不同的 URL。 在这种情况下,您可以为"登录"URL使用完全不同的路由器。 这也将更好地适用于搜索引擎,因为给定的URL将报告一致的内容,并且不会根据用户的状态而有所不同。 这也使得在Express中使用路由器变得非常容易。 您的"登录"路由器提供登录的 URL。 您可以使用中间件检查登录的 URL,以查看您是否实际登录,如果没有,则重定向回未登录的页面,反之亦然。
如果其他人遇到此问题,这对我有用:
var publicR = new router();
publicR.get('/', function *(next) {
....public.html....
});
var privateR = new router();
privateR.get('/', function *(next) {
....private.html....
});
app.use(mySwitcher);
function *mySwitcher(next){
if(isAuthenticated)
yield privateR.routes().call(this,next);
else
yield publicR.routes().call(this,next);
}
相关文章:
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 什么'在Express中路由时,应用程序级中间件和路由器级中间件之间的区别是什么
- Redux中间件在next()之前更改状态
- 快速的套接字 io 实例/中间件
- 如何使用Express'正确加载图像;s的静态中间件
- 如何在快递中制作中间件的动态链.js
- 在 Redux 中,在商店中应用中间件未正确称为化简器
- 意思是.JS中间件中的猫鼬填充不起作用
- "Cookies的这个实例“;在nodejs cookie中间件的源代码中
- Expressjs:如何跨路由共享路由中间件
- 如何在Keystone.js项目中使用Express.js中间件
- Express.js恶意路径中间件错误403
- 编写中间件'它不知道它在堆栈上的位置
- Router.use()需要中间件函数,但得到了一个未定义的函数
- webpack-dev中间件,如何在HMR失败时自动卸载
- Node js中间件,用于向mongo发出异步请求
- 如何在Express中获得POST字段,而不使用bodyParser中间件
- 节点-如何在POST路由中间件中访问请求
- “错误:连接 ENOENT”当节点快速中间件发出 POST 请求(使用节点请求库)时
- 如何跳过或跳过中间件?(节点)