gpt4 book ai didi

javascript - ExpressJS 不会触发 app.use 中的下一条路线

转载 作者:搜寻专家 更新时间:2023-11-01 00:47:38 26 4
gpt4 key购买 nike

我有一个问题,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));

每个函数(vehiclesRoutes、staticCostsRou​​tes 等)的构造都是相同的。

例如车辆路线:

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;
};

例如 staticCostsRou​​tes:

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;
};

我正在通过 Express Router,固定路由并返回 Router。

当我尝试调用 PUT/api/static-cost/:company_id/:id 时,它会触发 PUT/api/vehicles/:company_id/:id

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

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

情况是相反的,当我尝试调用 PUT/api/vehicle/:company_id/:id 时,它会触发 PUT/api/static-costs/:company_id/:编号

最佳答案

问题

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

因此,在这种情况下,传递给 vehicleRoutes(Router) 函数的常用引用 RoutergetVehiclesByCompany Controller 注册到 GET /:company_id 路线。然后以下尝试在 staticCostsRou​​tes(Router) 函数中的同一路由中注册 getStaticCostsByCompany Controller 将被忽略。

解决方案

而不是创建 Router 并将相同的引用传递给所有函数。在每个函数中创建一个新的 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());

车辆路线.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;
};

staticCostsRou​​tes.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;
};

关于javascript - ExpressJS 不会触发 app.use 中的下一条路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57340270/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com