Expressjs路线映射

时间:2017-03-22 13:08:53

标签: javascript node.js express

我想创建一种程序路由生成器。

我有一个像这样的模块./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);

其中ReportRoom是Mongoose模型(这不相关,但解释了我为什么尝试这种方法)。

每当y尝试到达第二个终点

$ curl my.domain.com/rooms/

服务器正确了解映射并​​记录:

GET /rooms

但它运行错误的模块:

Using CRUD for model: report

为什么allwais为每条路线运行FIRST中间件?

2 个答案:

答案 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。它应该有所帮助。