2016-06-01 2 views
1

req.paramsを読み込んで別のミドルウェアに渡そうとしています。しかし、私は応答で空のオブジェクトを取得しています。req.paramsがミドルウェアで渡されない

var app = require('express')(); 
app.get('/foo/:bar', function(req,res, next) { 
    console.log('1 --', req.params); 
    next(); 
}); 
app.use(function(req, res, next) { 
    console.log('2 --', req.params); 
    res.end(); 
}) 
app.listen(3000); 

私はこのURLを打っています - 私は取得しています

http://localhost:3000/foo/hello

出力がある -

1 -- { bar: 'hello' } 
2 -- undefined 

別のミドルウェアにreq.paramsを渡す方法は?

答えて

0

AFAIK、req.paramsは、パラメータを明示的に設定するハンドラでのみ使用できます。

だから、この作品:

app.get('/foo/:bar', function(req,res, next) { 
    console.log('1 --', req.params); 
    next(); 
}); 

app.use('/foo/:bar', function(req, res, next) { 
    console.log('2 --', req.params); 
    res.end(); 
}); 

をあなたは、あなたが別のプロパティでのparamsへの参照を保持する必要があることをしたくない場合は、次の

app.get('/foo/:bar', function(req,res, next) { 
    console.log('1 --', req.params); 
    req.requestParams = req.params; 
    next(); 
}); 

app.use(function(req, res, next) { 
    console.log('2 --', req.requestParams); 
    res.end(); 
}); 
0
//route 
app.get('/foo/:bar', yourMiddleware, function(req, res) { 
    res.send('params: ' + req.params); 
}); 

//middleware 
function yourMiddleware(req, res, next) { 
    console.log('params in middleware ' + req.params); 
    next(); 
} 
+1

このものより良いですオプションに加えて、 '' 'res.locals._params'''を使って1つの要求 - 応答サイクルを設定することもできます。 – Nivesh

+1

誰かがなぜこれを落としたのか教えてもらえますか? – Thalaivar

+0

こんにちはThalaivar、あなたのお返事ありがとうございます。しかし、あなたのソリューションは特定のルートだけで動作します。私はすべてのルートのために私のミドルウェアにreq.paramsを渡す必要があります。 –

関連する問題