2017-12-27 10 views
0

以下のコードはhttp://expressjs.com/en/guide/using-middleware.html#middleware.routerです。これは、エクスプレスルータインスタンス上のミドルウェアを定義します。それはうまく動作しますが、別のルータを定義し、そのルータも同じミドルウェアを使用します。特定のexpress.Router()インスタンスに対してのみミドルウェアを定義できますか?エクスプレスで特定のルータにミドルウェアを適用するにはどうすればよいですか?

var app = express() 
var router = express.Router() 

// predicate the router with a check and bail out when needed 
router.use(function (req, res, next) { 
    if (!req.headers['x-auth']) return next('router') 
    next() 
}) 

router.get('/', function (req, res) { 
    res.send('hello, user!') 
}) 

// use the router and 401 anything falling through 
app.use('/admin', router, function (req, res) { 
    res.sendStatus(401) 
}) 

答えて

0

あなたが.ALLを(使用することができますルートに固有のものを使用するには)機能

router.route('/') 
    .all(function (req, res, next){ 
     // do middleware stuff here and call next 
     next(); 
    }) 
    .get(function (req, res) { 
    res.send('hello, user!'); 
}); 
0

あなたは、すべての要求で使用されるミドルウェアを適用するには、次のように使用する場合があります。

以下のroute2を新しいjsファイルに分割し、そこからエクスポートすることができます。 (例:app.use(require('./routes/particularOne'))

http://expressjs.com/en/4x/api.html#router

var router = express.Router() 
// STEP 1 - defining a new router 
var router2 = express.Router() 


// STEP 2 - catch a particular route by using the new router 
router2.get('/particularOne', function (req,res,next) { 

    // to do something here 
    console.log(req.headers) 

    next() 
}) 


// STEP 3 - Adding the new router into the Express app 
app.use(router2) 

// use the router and 401 anything falling through 
app.use('/admin', router, function (req, res) { 
    res.sendStatus(401) 
}) 
+0

このミドルウェアは、すべてのルートに適用されます。私はそれをただ一つのルートに適用したい。私は 'express.Router()'からのより多くのルートを持っており、別のパスからのリクエストを処理しています。だから私はミドルウェアが1つのルートにのみ適用されるのを探しています。 –

+0

私は私の答えを更新しました。 – efkan

関連する問題