跨express中间件使用req.params

跨express中间件使用req.params,express,Express,我有一个快速代码块,如下所示 var express=require('express'); var bodyParser=require('body-parser'); //服务器应用程序 var app=new express(); use('/:user',bodyParser.json()); //应用程序级验证 应用程序使用('/:user',(请求、恢复、下一步)=>{ console.log(“[application]”,req.params); req.params.user=

我有一个快速代码块,如下所示

var express=require('express');
var bodyParser=require('body-parser');
//服务器应用程序
var app=new express();
use('/:user',bodyParser.json());
//应用程序级验证
应用程序使用('/:user',(请求、恢复、下一步)=>{
console.log(“[application]”,req.params);
req.params.user=parseInt(req.params.user);
next();
});
//一级路由器
var router1=express.Router({
合并参数:真
});
//向应用程序注册的1级路由器
应用程序使用('/:user/one/:a',路由器1);
//路由器1级验证
路由器1.使用(“/”,(请求、恢复、下一步)=>{
控制台日志(“[router-1]”,请求参数);
req.params.a=parseInt(req.params.a);
next();
});
//二级路由器
var router2=express.Router({
合并参数:真
});
//向一级路由器注册的二级路由器
路由器1.使用('/two/:b',路由器2);
//路由器2级验证
路由器2.使用(“/”,(请求、恢复、下一步)=>{
控制台日志(“[router-2]”,请求参数);
req.params.b=parseInt(req.params.b);
next();
});
//二级路由器有一个资源
router2.get('/func',(请求、恢复、下一步)=>{
res.send('Done!');
});
//启动应用程序
app.listen(2345);
在这里,可以假设每个中间件都对路径参数进行一些验证,并就地更新属性。比方说,这些中间件验证值类型并将值更新为各自的类型,而不是保留为字符串(就像AJV在
{compressetypes:true}
时所做的那样)

对于上面的代码块,我希望跨中间件更新
req.params
中的值,但不会发生。也就是说,对于这样的呼叫
http://localhost:2345/123/one/1/two/2/func
,在控制台中,我希望

[应用程序]{
用户:“123”
}
[路由器-1]{
用户:123,a:'1'
}
[路由器-2]{
用户:123,a:1,b:2
}
但是我得到

[应用程序]{
用户:“123”
}
[路由器-1]{
用户:“123”,a:“1”
}
[路由器-2]{
用户:'123',a:'1',b:'2'
}

我需要帮助来实现预期的输出。

IIRC每次都会解析参数。在解析参数之前,您正在控制台记录
req.params
,您确定要在解析到
int
之前显示它们吗?@Muhammad Zeeshan…这里需要关注的是后续日志行,它位于前面的parseInt()之后调用。@Dave Newton…是否有进行一次分析的选项。我想restify可以跨路由器级别保留
req.params
。我怀疑是否有内置选项,但我不知道是否有。