[英]Express router not working as expected with subdirectory
我将我的api查询按Node.js应用程序内的模块划分。 因此在index.js
我有:
app.use('/api/schedule/', apiSchedule);
然后,在apiSchedule路由器内部:
router.get('/:id', function (req, res) {
res.send('Queried ID');
});
router.get('/', function (req, res) {
res.send('Queried root');
});
router.get('/list', function (req, res) {
res.send('Queried list');
});
router.get('/list/:id', function (req, res) {
res.send('Queried list item');
});
我正在用邮递员测试这些路线,结果如下:
http://localhost/api/schedule/ <-- Queried root
http://localhost/api/schedule/1 <-- Queried ID
http://localhost/api/schedule/list <-- empty
http://localhost/api/schedule/list/ <-- empty
http://localhost/api/schedule/list/1 <-- Queried list item
为什么查询列表给出空响应? 我的配置出了点问题,或者路由器无法正常运行?
注意, 没有错误响应,但是有空白响应 。 另外,不会调用路由器功能内的console.log
。
可能是因为路由路径/:id
具有参数ID,所以此路由的regex也可以接受路由/
和/list
。
检查的价值req.params
在/:id
路线,你会看到,在情况/
ID参数将是undefined
和/list
情况下,将list
。
要修复它,您需要为/:id
指定正则表达式,如果ID是数字类型,则它将类似于/:id(\\d+)
。
我对UUID4类型(字符串)的ID参数有相同的问题,因此我设法使用此正则表达式([0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.