这可能看起来很愚蠢,但是当我在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'}
答案 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)
答案 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
添加到axios选项:
axios({
method: 'POST',
url: 'http://localhost:3001/users/login',
data: { username, password },
validateStatus: () => true
}).then(res => {
console.log(res.status);
});
这样,每个http响应都会解决axios返回的承诺。
答案 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 .