如何使用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)
答案 0 :(得分:2)
在文档中,它说如果你在:&之间放置一个参数?,该参数是可选的,即
app.get('/route/:id/:op?',...)
表示我可以将'/route/1'
和'/route/1/delete'
作为端点。
根据您的情况,您必须为其中一个使用不同的路线来消除歧义。
最好使用router.route('/post/:id')
将posts
作为一个项目,无论如何都是多数:)