如何从expressJS路由中排除模式

理查德·G

我正在尝试配置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我在其他地方设置的a 但是相反,下一个路由处理程序也被匹配。

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

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

谢谢。

罗伯特克莱普

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

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

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

只要它可能不匹配,其他条件也可能相同"adjustments"

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章