繁体   English   中英

错快递 API 资源按单调用

[英]Wrong Express API resource call by order

我遇到了一个有趣的问题。 我有四个不同的 get 端点,它们都包含查询参数。

router.get('/',getProducts)
router.get('/keyfilter',getFilterByKey)
router.get('/advancedfilters',getFilterProducts)
router.get('/:productId',getProductById)

在这种情况下工作正常。 当我将第四个端点移到 keyfilter 和advancefilter 上方时,即使我调用了正确的端点,我也无法访问它们。 如果我将第四个端点移到所有端点的顶部,则可以调用基本的getProducts端点,但不能调用其他端点。 为什么会发生这种情况,我该如何解决? 提前致谢。

如果我将第四个端点移到所有端点的顶部,则可以调用基本的 getProducts 端点,但不能调用其他端点。 为什么会发生这种情况,我该如何解决?

那是因为这个:

router.get('/:productId',getProductById)

匹配每一个顶级 GET 路由。 路由说明符'/:productId'本质上是一个通配符。 任何顶级路径都将匹配它。 所以,如果你把它放在第一位,那么它会窃取每个顶级 GET 请求并接受它。

由于这个问题,我没有在我的服务器中创建顶级通配符路由。 我建议您将其放在前缀下,例如:

router.get('/id/:productId',getProductById)

或者,您使用正则表达式并将匹配项过滤到仅满足与实际 productId 匹配的相当严格标准的内容,让其他所有内容都落到其他路由处理程序中。 仅当您的 productId 在正则表达式中唯一可识别并且永远不会与其他顶级路由混淆时,正则表达式才会起作用。

顶级通配符路由的问题,即使您把它放在最后,它也会为您的服务器中未来的 API 增长造成许多可能的冲突,并且您创建的任何新的顶级路由都可能与现有的 productId 路由冲突。 你不想要那个。 我个人认为最好不要使用顶级通配符路由并使用上面说明的前缀机制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM