1
我做了一个API,我已经如下路由的:快递JS GET参数
在主要航线文件:
//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中的测试。
在模块化路由文件夹( './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});
};
所以第一个网址,它没有子路由是:/api/test2 /:测试并注销掉你放置的任何东西:test在req.params中。
的第二网址,其子路由:/API /测试/:测试/:TEST2,但是当你把你的GET请求只:TEST2出现在req.params。
看来,如果你使用这种模式,路由的“根”(即主路由器)中的任何变量都不会被拾取。
有没有办法解决这个问题?
感谢
我建议你做'req._params = req._params || []'然后'req._params.push(req.params)'。这种方式适用于多级安装。 – Plato
谢谢。 :)我听说他们将在未来的版本中解决这个问题;我真的希望如此... – user1775718
@Plato:但是你有一个对象数组,你不能再访问'req._params.test'。我更新了我的答案,以反映多个安装级别。 – Amberlamps