Express Router读取两条不同的动态路由相同

时间:2016-05-25 15:29:07

标签: javascript node.js express

如何使用Express Router指定可选参数?此resource表示在参数后使用?

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

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

React frontend:

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 param的路由来执行.get(Posts.get)并使用:id param路由来执行.get(Posts.getOne)

1 个答案:

答案 0 :(得分:2)

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

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

表示我可以将'/route/1''/route/1/delete'作为端点。

根据您的情况,您必须为其中一个使用不同的路线来消除歧义。

最好使用router.route('/post/:id')posts作为一个项目,无论如何都是多数:)