使用axios时,状态代码300在catch块中返回错误

时间:2019-02-11 12:11:20

标签: javascript http axios

当我使用axios进行http呼叫时,它进入catch块并出现错误 我的要求是先处理300个响应,然后阻止不应捕获的响应,如何通过axios实现该目标

2 个答案:

答案 0 :(得分:1)

我认为您有多种选择。您可以从then回调中提取代码到函数中-当状态码为300时在错误处理程序中调用它。

您也可以尝试从axios尝试使用此选项,以仅在状态代码> 301时拒绝承诺。

axios.get('/user/12345', {
  validateStatus: function (status) {
    return status <= 300; // Reject only if the status code is greater than 300
  }
})

答案 1 :(得分:0)

我需要一些更有活力的东西:

// oversimplified index.js

const axios = require('axios')

const allowedStatusList = json.parse(process.env.ALLOWED_STATUSES) || ["2xx"]
// ^^ check that it's a valid input yourself :p 

const validateRequestStatusCode = allowedStatuses => {
  const stringStatuses = allowedStatuses.map(String)
  return status => {
    if (stringStatuses.includes(String(status))) {
      return true
    } else {
      for (let wildCardStatus of stringStatuses) {
        const validRange = wildCardStatus.match(/.+?(?=xx)/g)
        if (validRange && String(status).substring(0, 1) == validRange[0]) {
          return true
        }
      }
    }
    return false
  }
}

const axiosConfig = {
  validateStatus: validateRequestStatusCode(allowedStatusList),
  url,
  data
  // etc
}

axios(axiosConfig)
.then(...)
.catch(...)

这将允许你只提供一个环境变量(或者你想要做的配置)来改变什么状态是有效的。

例如,设置 ALLOWED_STATUSES='["2xx", "3xx", "4xx"]' 将允许 200 和 499 之间的任何状态代码。 设置 ALLOWED_STATUSES='[200, 201, "3xx"]',您将拥有更具体的过滤器。