Express路由器无法正常使用子目录

时间:2018-08-03 09:58:55

标签: javascript node.js express routing

我将我的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

1 个答案:

答案 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})

对其进行了修复。