使用嵌套 router.use 匹配错误路由的快速路由器

时间:2020-12-29 05:09:03

标签: node.js express

我创建了一些嵌套路由,所以基本路由是 /api/v1 然后它匹配其他路由

/citiesservices

现在这些路线也有他们的子路线

/api/v1/services
 GET /
 GET /services/:id

这是我为这个设置所做的

app.js

const express = require('express');

const app = express();

// load routes
require('./loader/routes')(app);
...

loader/routes.js

const router = require('express').Router();

const v1Router = require('../v1/router')(router );

module.exports = (app) => {
  app.use('/api/v1', v1Router);
};

此时路由应该匹配/api/v1

v1/router/index.js

const makeServiceRoutes = require('./ServiceRouter');

module.exports = (router) => {
  router.use('/items', makeItemRoutes(router, ItemController));
  router.use('/cities', makeCityRoutes(router, CityController));
  router.use('/services', makeServiceRoutes(router, ServiceController));
  return router
}

此时路由应该匹配到 api/v1/services

现在 ServiceRouter.js 做子路由。

module.exports = (router, ServiceController) => {
  router.get('/', ServiceController.getAllServices);
  router.get('/:id', ServiceController.getServiceById);
  return router;
};

问题是

api/v1/cities/:id

1 个答案:

答案 0 :(得分:0)

不要挂载 router 本身。为 ServiceRouter.js 创建并挂载一个新的子路由器:

module.exports = (ServiceController) => {
  const router = require('express').Router();
  router.get('/', ServiceController.getAllServices);
  router.get('/:id', ServiceController.getServiceById);
  return router;
};