Javascript ExpressJS没有';t在app.use中触发下一个路由
我有一个问题,ExpressJS在使用app.use时触发了错误的路由 这是index.js文件中的代码,我在其中合并了所有路由: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
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;
};