gpt4 book ai didi

javascript - Express js 从 URL 的根部获取参数(不像 req.params 那样简单)

转载 作者:行者123 更新时间:2023-11-30 16:43:56 25 4
gpt4 key购买 nike

我已经制作了一个 api,并且按如下方式路由它:

在主路由文件中:

  //with sub-route
app.use('/api/test/:test', require('./api/test'));

//Without sub-route
app.use('/api/test2/:test', function(req, res){
console.log('in test', req.params, req.body);
return res.status(200).json({params: req.params, body: req.body});
});

访问第二个路由会按预期显示 req.params 中的 :test。

在模块化路由文件夹 ('./api/test') 中,我有一个子路由 (index.js),如下所示:

router.get('/:test2', controller.getItem);

使用处理程序:

exports.getItem = function getItem(req, res) {
console.log('in getItem \nreq.params', req.params, '\nreq.body: ', req.body);
return res.status(200).json({yes: 'yes', params: req.params, body: req.body});
};

所以没有子路由的第一个 url 是:/api/test2/:test 并注销你在 req 中替换 :test 的任何内容.参数。

second url,它有子路由是:/api/test/:test/:test2,但是当你发送你的get请求时只:test2 出现在 req.params.

似乎如果您使用此模式,路由“根”(即主路由器)中的任何变量都不会被拾取。

有办法解决这个问题吗?

谢谢

最佳答案

你需要一个中间件来为你解决这个问题:

function paramFix(req, res, next) {
req._params = req.params;
next();
}
app.use('/api/test/:test', paramFix, require('./api/test'));

然后在最后一个回调函数中使用req._params.test

为了反射(reflect)多层次的挂载,你可以像这样扩展你的中间件:

function paramFix(req, res, next) {
req._params = req._params || {};
for (var key in req.params) {
if (req.params.hasOwnProperty(key)) {
req._params[key] = req.params[key];
}
}
next();
}
app.use('/api/test/:test', paramFix, require('./api/test'));

关于javascript - Express js 从 URL 的根部获取参数(不像 req.params 那样简单),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31526574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com