我有2条路线:
/api/system/list
-列出我的系统/api/system/:systemId/books/list
-列出当前系统的书每个API都有不同的文件:
systemAPI.js:
const list = router.get('/list', Validate(Validation.list), listHandler)
return {
routes: [list]
}
bookAPI.js:
const list = router.get('/list', Validate(Validation.list), listHandler)
return {
routes: [list]
}
最后,使用以上路线:
express.use('/api/system', systemAPI.routes)
express.use('/api/system/:systemId/book', bookAPI.routes)
问题是,当我输入列表书API(/api/system/:systemId/books/list
)时,它实际上调用了列表系统API(/api/system/list
)
更新:已解决!
我有两个主要问题:
app.use(..)
中)Express.Router()
的不同实例有关更多信息,请参考下面的答案。
答案 0 :(得分:1)
尝试颠倒路线顺序,这可能会解决您的问题:
express.use('/api/system/:systemId/book', bookAPI.routes);
express.use('/api/system', systemAPI.routes);
原因是express会“贪婪地”评估路由,甚至会解析为部分匹配。因此,重要的是要先保留更具体的路由,然后再保留更通用的路由。
此外,我认为您根据documentation systemAPI使用了错误的快速路由器:
const express = require('express');
const router = express.Router();
router.get('/list', Validate(Validation.list), listHandler)
module.exports = router;
bookAPI路线:
const express = require('express');
const router = express.Router();
router.get('/list', Validate(Validation.list), listHandler)
module.exports = router;
最后导入路由器并使用它们:
const express = require('express');
const bookRouter = require('./bookAPI'); //set the file paths based on your file structure
const systemRouter = require('./systemAPI');
const app = express();
app.use('/api/system/:systemId/book', bookRouter);
app.use('/api/system', systemRouter);