我想创建一种程序路由生成器。
我有一个像这样的模块./utils/crud.js
const express = require('express');
const router = express.Router();
module.exports = function (Model) {
router.get('/', (req, res, next) => {
console.log('Using CRUD for model: ' + Model.modelName);
});
return router;
};
我在我的主app.js
中使用它
const {Report, Room} = require('./utils/models');
const crud = require('./utils/crud');
const reports = crud(Models.Report);
const rooms = crud(Models.Room);
app.use('/reports', reports);
app.use('/rooms', rooms);
其中Report
和Room
是Mongoose模型(这不相关,但解释了我为什么尝试这种方法)。
每当y尝试到达第二个终点
$ curl my.domain.com/rooms/
服务器正确了解映射并记录:
GET /rooms
但它运行错误的模块:
Using CRUD for model: report
为什么allwais为每条路线运行FIRST中间件?
答案 0 :(得分:1)
在这两种情况下,您使用相同的路由器,尝试将const router = express.Router();
放入导出功能
答案 1 :(得分:1)
此代码const crud = require('./utils/crud');
将路由器实例从crud.js导入app.js.
app.js中的crud()
函数使用此实例。
您可以将const express = require('express');
表达式放入crud.js中的module.exports
。它应该有所帮助。