javascript-如何跳过或跳中间件? (节点)

给定两个中间件,如何添加首先会受到攻击的东西,然后确定将请求传递给哪个中间件.该请求只能被丢弃或转发到中间件之一,而不能两者都删除.

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,以查看您是否实际登录,如果没有,则将其重定向回未登录的页面,反之亦然.

上一篇:关于WordPress建立数据库连接错误的解决方法


下一篇:scrapy 爬取百度知道,多spider子一个项目中,使用一个pielines