在FeathersJS中编写嵌套路径参数

时间:2017-10-30 14:07:09

标签: rest feathersjs

如何在羽毛js中生成多级路径参数,如下所示:

api.com/category/catergoryId/subCatergory/subCatergoryId

1 个答案:

答案 0 :(得分:2)

以下摘自this Feathers FAQ entry

  

通常我们发现它们实际上并不需要,并且保持路线尽可能平坦要好得多。例如users/:userId/posts之类的东西 - 虽然很适合人类阅读 - 实际上并不像开箱即用的Feathers已经支持的等效/posts?userId=<userid>那样容易解析和处理。另外,当通过没有路线概念的websocket连接使用Feathers时,这也会更好。

     

但是,仍然可以通过在嵌套路由上注册现有服务并将route参数映射到查询参数来创建服务的嵌套路由,如下所示:

app.use('/posts', postService);
app.use('/users', userService);

// re-export the posts service on the /users/:userId/posts route
app.use('/users/:userId/posts', app.service('posts'));

// A hook that updates `data` with the route parameter
function mapUserIdToData(hook) {
  if(hook.data && hook.params.userId) {
    hook.data.userId = hook.params.userId;
  }
}

// For the new route, map the `:userId` route parameter to the query in a hook
app.service('users/:userId/posts').hooks({
  before: {
    find(hook) {
      hook.params.query.userId = hook.params.userId;
    },
    create: mapUserIdToData,
    update: mapUserIdToData,
    patch: mapUserIdToData
  }  
})
  

现在转到/users/123/posts会致电postService.find({ query: { userId: 123 } })并返回该用户的所有帖子。