使用app.use(中间件)

时间:2017-10-03 08:40:37

标签: javascript node.js express

因此,我每次向Express应用程序发出请求时都会调用一个中间件:

app.use(function(req, res, next) { 
   if(req.isAuthenticated()) return next();

   return response.redirect('/login');
})

对于登录页面,我正在提供一个简单的ejs文件,其中包含点击登录按钮和计算机的背景图像。

enter image description here

问题是,当我使用该中间件时,如果用户未经过身份验证,则不会提供作为后台的静态文件。其他一切都显示出来了。我需要中间件进行身份验证,但如果用户在应用程序上进行了全新打开,则它不会为文件提供服务(意味着用户未登录)。如何在保留此中间件的同时提供资产?

2 个答案:

答案 0 :(得分:0)

通常没有理由要强制您对静态资产进行身份验证(此外,您的中间件仅用于捕获对常规页面进行的未经身份验证的请求,而不是图像/ js / css文件),所以不要声明你的中间件,直到声明为静态资产提供服务的中间件:

app.use(express.static(...));

app.use(function(req, res, next) { 
   if(req.isAuthenticated()) return next();

   return response.redirect('/login');
})

答案 1 :(得分:0)

我同意在访问静态资源时不需要身份验证的想法,但如果您真的想这样做,当然可以,只需执行以下操作:

app.use((req, res, next)=>{
    if(req.isAuthenticated()){
        express.static(...)(req, res, next);
    }else{
        res.redirect('/login');
    }
})