ExpressJS 中间件 | req.params 在中间件中不可用?
ExpressJS Middleware | req.params not available in middleware?
这是ebayApi.handleParams:
handleParams : (req, res, next) => {
for(var param in req.params){
for(var key in ebayApi.request){
param == key ? ebayApi.request[key] = req.params[param] : key = key
}
}
next();
},
当我做的时候
app.use(ebayApi.handleParams);
中间件被执行了,但是req.params里面的值不一样
app.get( '/search', (req, res) => {
});
所以我不得不这样使用中间件
app.get( '/search', ebayApi.handleParams, (req, res) => {
});
有办法解决吗?每当我创建新路由时,我都想摆脱所有额外的输入。它是一个需要应用于所有传入请求的中间件。
This property is an object containing properties mapped to the named route “parameters”. For example, if you have the route /user/:name, then the “name” property is available as req.params.name.
参见:http://expressjs.com/en/4x/api.html#req.params
您的路由没有任何命名参数
还有人对解决方案感兴趣吗?
我所做的是为必须通过中间件的每条路由创建一个数组,然后遍历该数组并以这种方式应用它,而不是为每条路由进行硬编码。
var routes = [ '/profile/:UserID', '/categories/:CategoryID', '/item/:itemId', '/search/:keywords/:filter*?', '/keywords/:keywords']
for(var route in routes){
app.all(routes[route], middleware.ebay.handleParams);
}
这是ebayApi.handleParams:
handleParams : (req, res, next) => {
for(var param in req.params){
for(var key in ebayApi.request){
param == key ? ebayApi.request[key] = req.params[param] : key = key
}
}
next();
},
当我做的时候
app.use(ebayApi.handleParams);
中间件被执行了,但是req.params里面的值不一样
app.get( '/search', (req, res) => {
});
所以我不得不这样使用中间件
app.get( '/search', ebayApi.handleParams, (req, res) => {
});
有办法解决吗?每当我创建新路由时,我都想摆脱所有额外的输入。它是一个需要应用于所有传入请求的中间件。
This property is an object containing properties mapped to the named route “parameters”. For example, if you have the route /user/:name, then the “name” property is available as req.params.name.
参见:http://expressjs.com/en/4x/api.html#req.params
您的路由没有任何命名参数
还有人对解决方案感兴趣吗?
我所做的是为必须通过中间件的每条路由创建一个数组,然后遍历该数组并以这种方式应用它,而不是为每条路由进行硬编码。
var routes = [ '/profile/:UserID', '/categories/:CategoryID', '/item/:itemId', '/search/:keywords/:filter*?', '/keywords/:keywords']
for(var route in routes){
app.all(routes[route], middleware.ebay.handleParams);
}