【问题标题】:express router matching wrong routes with nested router.use使用嵌套 router.use 匹配错误路由的快速路由器
【发布时间】:2021-04-05 19:28:48
【问题描述】:

我已经创建了一些嵌套路由,所以基本路由是/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/services 击中api/v1/cities/:id

【问题讨论】:

    标签: node.js express


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 2018-09-27
      • 1970-01-01
      • 2014-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多