我将我的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
。
答案 0 :(得分:1)
可能是因为路由路径/:id
具有参数ID,所以此路由的正则表达式也可以接受路由/
和/list
。
检查req.params
路由中/:id
的值,您会看到在/
情况下ID参数为undefined
,在/list
情况下为ID将为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})