为什么我在axios中使用validateStatus仍然无法捕获mock.js生成的404响应?

sxissh06  于 2023-03-02  发布在  iOS
关注(0)|答案(1)|浏览(202)

我将validateStatus添加到axios对象中:

const http=axios.create({
    baseURL:'/api',
    timeout: 10000,
    validateStatus: function (status) {
        return status >= 200 && status < 300; // Treat all status codes outside of 2xx as errors
    }
})

创建get requeset并使用mock.js进行响应:
x一个一个一个一个x一个一个二个x
和页面。getCurve返回:

export default {
  getCurve: config => {
    console.log(config)

    const urlString = config.url;
    const urlObj = url.parse(urlString);
    const queryParams = queryString.parse(urlObj.query);
    console.log('curve_index', queryParams.curve_index);

    // console.log(curve_index,test_id)
    let results = [];
    let curve1 = [];
    let curve2 = [];
    let curve3 = [];
    for (let i = 0; i < 3000; i++) {
      curve1.push(Math.random() * 300)
    }
    results.push(curve1)

    for (let i = 0; i < 3000; i++) {
      curve2.push(Math.random() * 500)
    }
    results.push(curve2)

    for (let i = 0; i < 3000; i++) {
      curve3.push(Math.random() * 700)
    }
    results.push(curve3)
    console.log(results)
    if (queryParams.test_id == '1234') {
      if (queryParams.curve_index < 2) {
        return {
          code: 200,
          data: results[queryParams.curve_index],
          count_data: 3
        }
      }
      else {
        return {
          status: 404,
          data: results[queryParams.curve_index],
          count_data: 3
        }
      }
    }
  }
}

当我试图捕捉由axio引起的被拒绝的承诺时,结果是承诺状态仍然是已实现的,因为响应被then()捕捉到了。

getCurve(this.test_info).then(({ data }) => {
   console.log('response', data)
}).catch(error=>{
   window.alert(error);
});

和日志:

我想知道是我没有用Mock生成正确的404响应,还是我没有正确地使用Axios?

4zcjmb1e

4zcjmb1e1#

答案是mockjs实际上发送了一个状态为200的响应,而我在mock中定义的'status'只是在响应的数据中添加了一个'status'属性,根据答案:https://github.com/nuysoft/Mock/issues/501#issuecomment-1442677675我应该使用mock-server来代替。

相关问题