HapiJS范围:自定义错误消息而不是"范围不足"

时间:2016-06-26 10:22:31

标签: node.js hapijs

我使用HapiJS作为我的REST API。我还使用范围功能来实现对资源的简单基于角色的访问。示例路由配置对象如下所示:

{
    method: 'GET',
    path: '/users/{userID}',
    config: {
        auth: {
            access: {
                scope: ['user-{params.userID}']
            }
        },
        handler: getUserHandler
    }
}

默认情况下,当前经过身份验证的用户没有scope访问给定端点所需(例如,scope: 'user-1'尝试获取/users/1时),那么错误响应返回:

{"statusCode":403,"error":"Forbidden","message":"Insufficient scope"}

我想要的是用自定义状态代码替换此403错误和错误消息 - 我想要返回404 Not Found。我想这样做仅适用于某些端点。这可能吗?

1 个答案:

答案 0 :(得分:1)

您可以通过server.ext('onPostHandler', (request, reply) => {...

执行此操作

您可以在请求中获取routeresponse对象。

response对象包含isBoom,如果是,则应该获得response.output.statusCode,如果它是403,您可以验证它。

route对象包含path,如果它是您想要的端点,您可以验证它。

这样的事情:

server.ext('onPostHandler', (request, reply) => {

  const response = request.response;

  if (response.isBoom &&
     response.output.statusCode === 403 &&
     request.route.path === 'your_endpoint') {
    
    // your code here
  }

  return reply.continue();
});