任何方式获得4xx响应的身体没有尝试...捕获时使用等待?

时间:2017-11-18 13:23:06

标签: node.js superagent

async function checkToken(token) {
  const result = await superagent
    .post(`${config.serviceUrl}/check_token`)
    .send({token});
  return result.body;
}

如果此调用将返回401,则默认选项会抛出异常,这不是我所期望的。 API i调用也使用HTTP状态消息作为主体来提供信息,我只需要正文部分。

http状态401的响应是

{
    "data": null,
    "error": {
        "code": "INVALID_TOKEN",
        "message": "Token is not valid"
    }
}

目前,为了得到这个,我需要用try ... catch

包装所有超级调用
async function checkToken(token) {
  let result = null;
  try {
    result = await superagent
      .post(`${config.serviceUrl}/check_token`)
      .send({token});
  } catch (e) {
    result = e.response;
  }
  return result.body;
}

任何方式让第一个样本工作并返回JSON没有查看HTTP状态?

2 个答案:

答案 0 :(得分:1)

试试这个

async function checkToken(token) {
  const result = await superagent
    .post(`${config.serviceUrl}/check_token`)
    .send({token}).then(v=>v).catch(v=>v);
  return result.body;
}

答案 1 :(得分:1)

默认情况下,Superagent会将每个4xx和5xx响应视为错误。但是,您可以使用.ok告诉它,您认为哪些回复是错误的。

文档(https://visionmedia.github.io/superagent/#error-handling),

中的示例示例
request.get('/404')
 .ok(res => res.status < 500)
 .then(response => {
   // reads 404 page as a successful response
})

如果.ok内的函数返回true,则不会将其视为错误情况。