Javascript ExpressJS没有';t在app.use中触发下一个路由

Javascript ExpressJS没有';t在app.use中触发下一个路由,javascript,node.js,express,Javascript,Node.js,Express,我有一个问题,ExpressJS在使用app.use时触发了错误的路由 这是index.js文件中的代码,我在其中合并了所有路由: const app = express(), Router = express.Router(); app.use("/api/vehicle", vehiclesRoutes(Router)); app.use("/api/static-costs", staticCostsRoutes(Router)); app.use("/api/company", c

我有一个问题,ExpressJS在使用app.use时触发了错误的路由 这是index.js文件中的代码,我在其中合并了所有路由:

const app = express(),
  Router = express.Router();

app.use("/api/vehicle", vehiclesRoutes(Router));
app.use("/api/static-costs", staticCostsRoutes(Router));
app.use("/api/company", companiesRoutes(Router));
app.use("/api/worker", workersRoutes(Router));
每个功能(车辆路线、静态成本路线等)的构造相同

例如,车辆路线:

export default (router) => {
  router.get("/:company_id", getVehiclesByCompany);
  router.post("/:company_id", postVehicle);
  router.put("/:company_id/:id", putVehicle);
  router.delete("/:company_id/:id", deleteVehicle);
  return router;
};
例如,静态成本路由:

export default router => {
  router.get("/:company_id", getStaticCostsByCompany);
  router.post("/:company_id", postStaticCost);
  router.put("/:company_id/:id", putStaticCost);
  router.delete("/:company_id/:id", deleteStaticCost);
  return router;
};
我经过快速路由器、固定路由器和返回路由器

当我试图调用PUT/api/static cost/:company\u id/:id时, 它触发PUT/api/vehicles/:company\u id/:id

当我交换这两件事时,我提到了一些有趣的事情:

app.use("/api/static-costs", staticCostsRoutes(Router));
app.use("/api/vehicle", vehiclesRoutes(Router));

情况正好相反,当我试图调用PUT/api/vehicle/:company\u id/:id时,它触发PUT/api/static costs/:company\u id/:id问题

您正在创建
路由器
对象,并将相同的引用传递给所有方法。 如果仔细观察所有方法中的路线都相同,则只有控制器不同

因此,在这种情况下,传递给
VehiclerRoutes(Router)
函数的通常引用的
Router
GetVehiclerByCompany
控制器注册到GET
/:company\u id
路由。然后,以下尝试在
staticCostsRoutes(Router)
函数中的同一路由注册
getStaticCostsByCompany
控制器的操作将被忽略

解决方案

而不是创建
路由器
并将相同的引用传递给所有函数。 在每个函数中创建一个新的
Router
对象,并返回该对象,以便它们不共享相同的引用

const app = express(),

app.use("/api/vehicle", vehiclesRoutes());
app.use("/api/static-costs", staticCostsRoutes());
app.use("/api/company", companiesRoutes());
app.use("/api/worker", workersRoutes());
VehiclerRoutes.js

const router = express.Router();
export default () => {
  router.get("/:company_id", getVehiclesByCompany);
  router.post("/:company_id", postVehicle);
  router.put("/:company_id/:id", putVehicle);
  router.delete("/:company_id/:id", deleteVehicle);
  return router;
};
staticCostsRoutes.js

const router = express.Router();
export default () => {
  router.get("/:company_id", getStaticCostsByCompany);
  router.post("/:company_id", postStaticCost);
  router.put("/:company_id/:id", putStaticCost);
  router.delete("/:company_id/:id", deleteStaticCost);
  return router;
};