【问题标题】:Express Router reading two different dynamic routes the sameExpress Router 读取两个不同的动态路由相同
【发布时间】:2016-09-23 07:43:34
【问题描述】:

如何使用 Express Router 指定可选参数?这个resource 说在参数之后使用?。

基本上,我通常点击/posts 端点来获取所有帖子。但有时我需要添加type 过滤器并获取基于该类型的所有帖子。相反,路由将我的/posts/:id 读取为与/posts/:type 相同的动态路由,因此当我需要从/posts/:id 发出getOne 请求时,它永远不会命中,因为它会命中/:type 并且做一个常规的Posts.get。

这些是不同的路线,但Router 将它们视为相同。

反应前端:

getPosts(type) {
    return http({
        method: 'GET',
        url: `${url}/${type}`,
        data: data
    });
}

NodeJS Express 路由器后端:

/* Posts CRUD */
router.route('/posts/:type?')
  .get(Posts.get)
  .post(Posts.post);

/* Post CRUD */
router.route('/posts/:id')
  .get(Posts.getOne)
  .put(Posts.put)
  .delete(Posts.delete);

澄清:我需要带有:type 参数的路由来执行.get(Posts.get) 和带有:id 参数的路由来执行.get(Posts.getOne)

【问题讨论】:

  • 如果您希望两者的初始路径相同,您需要限制与 :type 路由匹配的内容,以便与 :id 路由匹配的内容不会匹配,而是传递给:id 路线。正如您目前所拥有的,与:id 路由匹配的所有内容也与:type 路由匹配。见:stackoverflow.com/q/10858005/5812121

标签: javascript node.js express


【解决方案1】:

在文档中,它说如果您在 : & ? 之间放置一个参数,则该参数是可选的,即

app.get('/route/:id/:op?',...)

意味着我可以将'/route/1' 和'/route/1/delete' 作为端点。

对于您的情况,您必须为其中之一使用不同的路线以消除歧义。

最好使用router.route('/post/:id') 来获取一项,因为posts 无论如何都是复数:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-20
    • 2018-01-07
    • 2013-10-09
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 2021-02-03
    • 2016-08-17
    相关资源
    最近更新 更多