如何从expressJS路由中排除模式

时间:2016-06-27 09:42:10

标签: node.js express

我正在尝试配置expressJS路由。

app.route(base + '/inventory/adjustments').get(policy.isAllowed, inventoryChangeCtrl.search);


  app.route(base + '/inventory/:inventoryId(?!^adjustments$)').get(policy.isAllowed, inventoryCtrl.findById)

考虑输入../inventory/adjustments

问题是在第一个路由中,它匹配正确,但是控制器调用next(),它应该落到我在别处设置的default route handler。但相反,下一个路由处理程序也匹配。

所以现在我尝试使用正则表达式从该路由处理程序中排除更具体的字符串,但现在它不匹配正确的输入,如.../inventory/9039309309

有人可以建议如何从第二条路线中排除第一条路线吗? (并且仍然允许为默认处理程序调用next。)

感谢。

1 个答案:

答案 0 :(得分:0)

如果inventoryId始终为数字,则可以使匹配更具体:

app.route(base + '/inventory/:inventoryId(\\d+)', ...);

这样,它将不匹配"adjustments",并且路线不会触发。

同样适用于它可能匹配的其他特定模式,只要该模式不匹配"adjustments"

编辑:如果inventoryId是MongoDB ObjectId,则匹配将变为:

app.route(base + '/inventory/:inventoryId([a-fA-F\\d]{24})', ...);