ExpressJS 不会在 app.use 中触发下一个路由

2024-01-07

我在使用 app.use 时遇到 ExpressJS 触发错误路由的问题 这是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;
};

例如静态成本路由:

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、固定路由和返回路由器。

当我试图打电话时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/:id.


Problem

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

所以,在这种情况下,通常引用的Router传递给vehicleRoutes(Router)函数注册了getVehiclesByCompany控制器到 GET/:company_id路线。然后进行以下尝试注册getStaticCostsByCompany控制器在同一路线staticCostsRoutes(Router)函数被忽略。

Solution

而不是创造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;
};

静态CostsRou​​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;
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ExpressJS 不会在 app.use 中触发下一个路由 的相关文章

随机推荐

  • 最新 PlayServices 8.3 中的 GoogleSignInAccount 内部崩溃

    Play 服务的最新版本 8 3 存在与 GoogleSignInAccount 相关的问题 我们收到了由此产生的崩溃 这是堆栈跟踪 Android 4 4 4 Manufacturer Sony Model D5503 Date Thu
  • C 中的递归。将非递归函数变成递归函数

    gcd 应该是一个递归函数 它应该返回 void 它应该采用两个正整数并将 GCD 放在第三个参数中 这是我编码的 gcd 函数 然而 我意识到这不是一个递归函数 我如何更改此代码 使其成为递归函数 void gcd int x int y
  • 如何使用 Access VBA 在 textBox.Setfocus 之后选择 TextBox 中的所有文本

    当我单击 或双击 Access 表单的文本框中时 我需要选择其中的所有文本 我尝试了以下代码 但没有成功 Me txt CompraPreco SelStart 0 Me txt CompraPreco SelLength Len Me t
  • Java 双重比较 epsilon

    我编写了一个类 用 Java 中的两个双精度数来测试相等 小于和大于 我的一般情况是比较价格 精确度可以达到半美分 59 005 与 59 395 相比 我选择的 epsilon 适合这些情况吗 private final static d
  • 向面板添加垂直滚动条

    我正在尝试做一个Panel可滚动 但只能垂直滚动 所以AutoScroll不起作用 因为子控件必须越过左边缘 那么这是如何做到的呢 尝试 仅 垂直滚动 自动滚动需要为 false 才能接受更改 mypanel AutoScroll fals
  • 在 R 中设置 kmeans 的静态中心

    我想根据预先确定的中心点 my center Points 对长和纬度 my long lats 列表进行分组 当我跑步时 k lt kmeans as matrix my long lats centers as matrix my ce
  • 使用 UIPasteBoard 复制图像 (Swift)

    我最近看到这个项目 用户可以从自定义键盘上点击 GIF 他们会看到一个 复制的 工具栏出现 我有一个问题 如何在产品中重现此工具提示GIF 教程 http o aolcdn com hss storage midas 27c2fb5dfec
  • jQuery 灯箱画廊

    是否存在具有标准灯箱功能的 jQuery 插件 在 灯箱 窗口中 我想在同一 灯箱 窗口中的某处 左侧 底部等 将当前图像和其余图 像显示为缩略图 ColorBox http colorpowered com colorbox 一个轻量级
  • 对 Automapper 配置文件进行单元测试

    我的确想要测试自定义逻辑CreateMap方法 我愿意NOT想要测试某些类型的映射是否存在 我该怎么做或者我需要知道哪些课程 我很感激该文件的每一个提示 Automapper 单元测试似乎很少见 public class UnitProfi
  • 计算 numpy.chararray 中字符出现次数的最快方法

    Python主义者 计算字符在字符中出现的最快方法是什么numpy character array 我正在做以下事情 In 59 for i in range 10 m input Enter A or B rr 0 i m Enter A
  • 使用 ASP MVC 下载并显示私有 Azure Blob

    我将 ASP MVC 5 Razor 与 Microsoft Azure Blob 存储结合使用 我可以使用 MVC 成功地将文档和图像上传到 Blob 存储 但我很难找到一些如何下载和显示文件的 MVC 示例 如果 blob 存储为公共文
  • ConstraintLayout 不会省略 TextView 中的长文本

    我有一个TextView在图像的右侧 我试图在图像旁边放置一些长文本 但该文本应通过在末尾添加 自动结束 然而 这是行不通的 我使用这个布局
  • Google 地图 API - geocode() 不返回纬度和经度

    我试图使用以下代码通过地址获取纬度和经度 function initialize directionsDisplay new google maps DirectionsRenderer geocoder new google maps G
  • 如何避免在factory_girl中循环创建关联模型?

    我有一个应用程序 用户可以使用多种服务登录 例如谷歌 脸书 推特等 为了促进这一点 我有一个基础User模型哪个has many Identity记录 Each Identity记录有一个provider字段 例如 Google Faceb
  • 实现幻灯片的下一个和后退按钮

    我正在尝试制作一个 php 幻灯片 我几乎完成了 我只需要实现下一个和后退按钮 我认为这很容易 但显然你不能在 php 中增加索引 sql SELECT pic url FROM pic info result conn gt query
  • 无法在 Angular 2 应用程序内提交 HTML 表单

    我试图在我的 Angular 2 beta2 应用程序中包含静态 HTML 表单 但当我点击提交按钮时它不会执行任何操作 这是我使用的 HTML
  • Jenkins代理407错误

    我在跑詹金斯 CI在使用代理访问互联网的公司网络内 我尝试在中配置代理详细信息插件 gt 高级 但即使凭据是正确的 是的 我检查了很多次 它也无法验证 测试 URL 即使在http google com http google com并返回
  • 是否可以按 3 个月的时间段对结果进行分组?

    我尝试从当月开始按 3 个月的时间段对结果进行分组 如下所示 row1 15 This should contain November September and October row2 25 This should contain Au
  • 使用 Enterprise Library 5 进行数据库日志记录

    有人知道如何使用 EL 5 0 实现数据库异常日志记录吗 Thanks 您将需要针对数据库运行脚本 以便它为您创建特定的表结构 此外 还将创建一个存储过程 您必须在跟踪侦听器的配置部分中引用该存储过程 您应该能够在此处找到此脚本文件 C E
  • ExpressJS 不会在 app.use 中触发下一个路由

    我在使用 app use 时遇到 ExpressJS 触发错误路由的问题 这是index js 文件中的代码 我在其中组合了所有路由 const app express Router express Router app use api v