如何从Express 4中间件访问Controller类?

时间:2016-08-23 10:55:59

标签: node.js express

我正在使用ExpressJS v4开展项目。

按执行顺序我有以下结构。

  1. 注册中间件
  2. 注册处理程序(处理程序是ES6类的方法)
  3. 所以,我的处理程序看起来像..

    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对象。

1 个答案:

答案 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