我正在使用ExpressJS v4开展项目。
按执行顺序我有以下结构。
所以,我的处理程序看起来像..
let aCtrl = new AController(...);
let bCtrl = new BController(...);
let blogCtrl = new BlogController(...);
app.get('/blog/post/:id', (req, res, next) => {
return blogCtrl.showBlogPost(req, res, next);
});
...
我在身份验证中间件中所做的是:
userCheckMiddlware(req, res, next)
{
if(authSuccess)
next();
else
res.sendStatus(401);
}
现在,我想要做的是
userCheckMiddlware(req, res, next)
{
if(controller.doesNotRequireAuth) {
next();
}
if(authSuccess)
next();
else
res.sendStatus(401);
}
现在,我的问题是如何获得处理程序,即具有doesNotRequireAuth()
方法的Controller对象。
答案 0 :(得分:0)
嗯,你不能。在控制器甚至已知之前,它就是中间件。
但是您不必将其放入控制器本身,您可以选择是否将其用作中间件。
即
// bearerAuth is middleware method for authentize
router.get('/users/me', bearerAuth, user.me);
router.put('/users/me', bearerAuth, user.me);
router.patch('/users/me', bearerAuth, user.me);
router.delete('/users/me', bearerAuth, user.me);
router.post('/images', image.upload); //You can upload images without auth