2016-08-23 6 views
0

私は、ExpressJS v4を使ってプロジェクトを進めています。Express 4ミドルウェアからコントローラクラスにアクセスする方法は?

実行順序は次のとおりです。

  1. 登録ミドルウェア
  2. 登録ハンドラ(ハンドラはES6クラスのメソッドです)

だから、私のハンドラは、私が認証ミドルウェアでやって何を...

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); 
    } 

今、私は何をしたいさて、私の問題は、私はdoesNotRequireAuth()メソッドを持っているハンドラすなわちコントローラオブジェクトを取得しない方法です

userCheckMiddlware(req, res, next) 
    { 
     if(controller.doesNotRequireAuth) { 
      next(); 
     } 

     if(authSuccess) 
      next(); 
     else 
      res.sendStatus(401); 
    } 

のラインで何かです。

答えて

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 
+0

私はExpressは、要求を解析し、最初のハンドラを決定し、その後、中間用品の実行を開始するだろうと思いました。そうじゃないの? – ultimate

+0

はい、ハンドラーを繰り返し処理し、URLの一致を探します。一致する場合、expressはミドルウェアを1つずつ実行します。しかし、それが実行される前に、 "最後のミドルウェア"(通常コントローラです)はわかりません。 – libik

関連する問題