我使用名为consign的模块一次在目录中包含多个不同的模块(而不是拥有一堆require语句)。在这些模块中,我一直在为路由器文件顶部的每个端点设置安装路径,以免在整个文件中重复多次。但是,consign将相同的路由器传递给其中的每一个(通常应该没问题),如果任何文件中的路径相同,则通过use()方法实际覆盖安装路径。我会尝试以最好的方式展示这一点......
/routes/api.js
var express = require('express');
var router = express.Router();
var consign = require('consign');
// get all routes inside the api directory and attach them to the api router
// all of these routes should be behind authorization
consign({
cwd: 'routes'
})
.include('api')
.into(router);
module.exports = router;
/routes/api/player.js
module.exports = function (router) {
router.use('/player', router);
router.get('/getInfo', function (req, res, next) {
res.error = false;
res.data = {};
res.message = "Player getInfo API Call - IN DEVELOPMENT";
next();
});
};
/routes/api/profile.js
module.exports = function (router) {
router.use('/profile', router);
router.get('/getInfo', function (req, res, next) {
res.error = false;
res.data = {};
res.message = "Profile getInfo API Call - IN DEVELOPMENT";
next();
});
}
Consign正在加载模块就好了,但是当路径相同时,router.use()方法似乎会覆盖回调(忽略基本路径)。例如," / player / getInfo"和" / profile / getInfo"作为一个电话工作,但都回应" / profile / getInfo"数据
顺便说一句 - 如果您想知道并且如果它是相关的,我有一小部分中间件称为" formatResponse"这将以相同的方式获取数据并格式化所有调用,这就是为什么我有一个" next()"而是从功能本身响应。该代码也在下面。/middleware/formateResponse.js
module.exports = function(req, res, next) {
res.json({
error: res.error,
data: res.data,
message: res.message
});
}
答案 0 :(得分:0)
你现在的方式,没有范围。您将路由器安装在' / profile'然后在' / getInfo'中添加了一个get语句。路径并没有像你想象的那样改变范围。他们都存储以匹配' / getInfo',最后一个获胜(无论前缀如何。我打赌导航到http://your-server/getInfo也会有效)。
您需要为每个模块使用不同的路由器(然后将其安装在所需的路径根目录上),或者在其余路由中更明确(例如,呼叫router.get('/profile/getInfo', ...)
。