如何从Axios中的http错误中获取状态代码?

时间:2016-08-25 19:13:15

标签: javascript axios

这可能看起来很愚蠢,但是当我在Axios中请求失败时,我试图获取错误数据。

axios.get('foo.com')
    .then((response) => {})
    .catch((error) => {
        console.log(error) //Logs a string: Error: Request failed with status code 404
    })

代替字符串,是否可以获取具有状态代码和内容的对象?例如:

Object = {status: 404, reason: 'Not found', body: '404 Not found'}

13 个答案:

答案 0 :(得分:179)

您看到的是toString对象的error方法返回的字符串。 (error不是字符串。)

如果收到服务器的响应,error对象将包含response属性:

axios.get('/foo')
  .catch(function (error) {
    if (error.response) {
      console.log(error.response.data);
      console.log(error.response.status);
      console.log(error.response.headers);
    }
  });

答案 1 :(得分:10)

正如@Nick所说,当你console.log一个JavaScript Error对象时,你看到的结果取决于console.log的确切实现,它的变化和(imo)使得检查错误非常烦人

如果您希望看到完整的Error对象及其绕过toString()方法的所有信息,您可以使用JSON.stringify

axios.get('/foo')
  .catch(function (error) {
    console.log(JSON.stringify(error))
  });

答案 2 :(得分:4)

我正在使用此拦截器来获取错误响应。

null                    :: [a] -> Bool
null []                 =  True
null (_:_)              =  False

答案 3 :(得分:4)

您可以使用传播运算符(...)将其强制为新对象,如下所示:

axios.get('foo.com')
    .then((response) => {})
    .catch((error) => {
        console.log({...error}) 
})

请注意:这不是Error的实例。

答案 4 :(得分:2)

请求配置中有一个名为RUN_AS=$(id -u):$(id -g); docker-compose up的新选项。您可以使用它来指定在状态<100或状态> 300(默认行为)时不引发异常。示例:

validateStatus

答案 5 :(得分:1)

这是一个已知错误,请尝试使用"axios": "0.13.1"

enter image description here

我遇到了同样的问题所以我最终使用了"axios": "0.12.0"。它对我来说很好。

答案 6 :(得分:1)

使用TypeScript,可以很容易地找到正确类型的内容。

import { AxiosResponse, AxiosError } from 'axios'

axios.get('foo.com')
  .then(response: AxiosResponse => {
    // Handle response
  })
  .catch((reason: AxiosError) => {
    if (reason.response!.status === 400) {
      // Handle 400
    } else {
      // Handle else
    }
    console.log(reason.message)
  })

答案 7 :(得分:0)

您可以将错误放入对象并记录该对象,如下所示:

axios.get('foo.com')
    .then((response) => {})
    .catch((error) => {
        console.log({error}) // this will log an empty object with an error property
    });

希望这可以帮助某人。

答案 8 :(得分:0)

为了获取服务器返回的http状态代码,您可以将validateStatus: status => true添加到a​​xios选项:

axios({
    method: 'POST',
    url: 'http://localhost:3001/users/login',
    data: { username, password },
    validateStatus: () => true
}).then(res => {
    console.log(res.status);
});

这样,每个http响应都会解决axios返回的承诺。

https://github.com/axios/axios#handling-errors

答案 9 :(得分:0)

这是我的代码:为我工作

 var jsonData = request.body;
    var jsonParsed = JSON.parse(JSON.stringify(jsonData));

    // message_body = {
    //   "phone": "5511995001920",
    //   "body": "WhatsApp API on chat-api.com works good"
    // }

    axios.post(whatsapp_url, jsonParsed,validateStatus = true)
    .then((res) => {
      // console.log(`statusCode: ${res.statusCode}`)

            console.log(res.data)
        console.log(res.status);

        // var jsonData = res.body;
        // var jsonParsed = JSON.parse(JSON.stringify(jsonData));

        response.json("ok")
    })
    .catch((error) => {
      console.error(error)
        response.json("error")
    })

答案 10 :(得分:0)

仅获取错误并没有返回对象确实很奇怪。在返回 error.response 的同时,您可以访问您需要的大多数反馈内容。

我最终使用了这个:

axios.get(...).catch( error => { return Promise.reject(error.response.data.error); });

严格提供了我需要的东西:状态代码 (404) 和错误的文本消息。

答案 11 :(得分:0)

整个错误只能使用 error.response 来显示:

axios.get('url').catch((error) => {
      if (error.response) {
        console.log(error.response);
      }
    });

答案 12 :(得分:-2)

on:
  push:

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Run tests
        run: |
          docker build .