2016-08-25 23 views
30

Może wydawać się to głupie, ale próbuję uzyskać dane o błędach, gdy żądanie nie powiedzie się w Axios.Jak mogę uzyskać kod stanu z błędu http w Axios?

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

Zamiast napisu, czy możliwe jest uzyskanie obiektu z prawdopodobnie kodem stanu i zawartością? Na przykład:

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

Odpowiedz

65

To, co widzisz, to ciąg zwracany przez metodę toString obiektu error. (. error nie jest ciągiem)

Jeśli odpowiedź została otrzymana z serwera, obiekt error będzie zawierać właściwość 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

Czy możesz wyjaśnić magię, która za nim automatycznie zamienia się w ciąg znaków, jeśli nie odwołuję się do właściwości 'response'? –

+1

'console.log' używa metody' toString' do formatowania obiektów 'Error'. Nie ma nic wspólnego z odwołaniem się do właściwości 'response'. –

+1

Nadal jestem zdezorientowany, czy to jest spesific obiektów błędu lub? Jeśli konsola.loguje obiekt, otrzymuję obiekt, a nie ciąg znaków. –

1

Jest to znany błąd, spróbuj użyć "axios": "0.13.1"

https://github.com/mzabriskie/axios/issues/378

miałem ten sam problem, więc skończyło się używając "axios": "0.12.0". Działa to dobrze dla mnie.

+0

To nie jest ten sam problem mam, tam nie ma nawet obiektu związanego z logowaniem "error" –

3

Używam tego przechwytujących, aby uzyskać odpowiedź o błędzie.

const HttpClient = axios.create({ 
    baseURL: env.baseUrl, 
}); 

HttpClient.interceptors.response.use((response) => { 
    return response; 
}, (error) => { 
    return Promise.resolve({ error }); 
}); 
6

Jak powiedział @Nick, rezultaty widać po console.log JavaScript Error przedmiot zależy od dokładnej realizacji console.log, która zmienia i (IMO) sprawia, sprawdzanie błędów niezwykle irytujące.

Jeśli chcesz zobaczyć pełną Error przedmiotu oraz wszelkie informacje, jakie niesie z pominięciem metody toString(), można po prostu użyć JSON.stringify:

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