【问题标题】:ExpressJS Middleware | req.params not available in middleware?ExpressJS 中间件 | req.params 在中间件中不可用?
【发布时间】:2017-08-11 09:41:19
【问题描述】:

这是 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) => {

});  

有办法解决吗?每当我创建新路由时,我都想摆脱所有额外的输入。它是一个需要应用于所有传入请求的中间件。

【问题讨论】:

  • 我猜你实际上想使用req.query 而不是req.params。此外,您的代码看起来对并发使用不是很有弹性,因为它看起来像 ebayApi.request 没有绑定到特定请求。

标签: node.js express middleware


【解决方案1】:

还有人对解决方案感兴趣吗?

我所做的是为必须通过中间件的每个路由创建一个数组,然后循环遍历该数组并以这种方式应用它,而不是为每个路由硬编码。

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

【讨论】:

  • 感谢您不要忘记发布解决方案
【解决方案2】:

此属性是一个包含映射到命名路由“参数”的属性的对象。例如,如果您有路由 /user/:name,则“name”属性可用作 req.params.name。

见:http://expressjs.com/en/4x/api.html#req.params

您的路线没有任何命名参数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 2016-01-17
    • 2017-07-23
    • 2023-01-21
    • 1970-01-01
    相关资源
    最近更新 更多