2016-08-25 4 views
30

Das mag dumm klingen, aber ich versuche, die Fehlerdaten zu erhalten, wenn eine Anfrage in Axios fehlschlägt.Wie kann ich den Statuscode von einem HTTP-Fehler in Axios bekommen?

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

Anstelle der Zeichenfolge, ist es möglich, ein Objekt mit vielleicht dem Statuscode und Inhalt zu bekommen? Zum Beispiel:

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

Antwort

65

Was Sie sehen, ist die Zeichenfolge durch die toString Methode des error Objekt zurückgegeben. (. error ist keinen String)

Wenn eine Antwort vom Server empfangen wurde, das error Objekt enthält die response Eigenschaft:

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

Kannst du die Magie hinter ihr automatisch erklären, die sich in eine Zeichenkette verwandelt, wenn ich mich nicht auf die' response' Eigenschaft beziehe? –

+1

'console.log' verwendet die Methode' toString', um Fehlerobjekte zu formatieren. Es hat nichts damit zu tun, auf die Eigenschaft "response" zu verweisen. –

+1

Ich bin immer noch verwirrt, ist das auf Fehler Objekte oder? Wenn ich ein Objekt console.log anmelde, bekomme ich das Objekt, keine Zeichenfolge. –

1

Dies ist ein bekannter Fehler, versuchen Sie "axios": "0.13.1"

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

Ich hatte das gleiche Problem zu verwenden, so landete ich mit "axios": "0.12.0" auf. Es funktioniert gut für mich.

+0

Dies ist nicht das gleiche Problem, das ich habe, gibt es nicht einmal ein Objekt beteiligt, wenn ich 'Fehler' logge –

3

ich diesen Abfangjäger bin mit der Fehlerreaktion zu erhalten.

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

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

Wie @ Nick sagte, sehen die Ergebnisse, die Sie, wenn Sie console.log ein JavaScript-Objekt Error über die genaue Umsetzung von console.log abhängen, die und (imo) variiert macht Fehler unglaublich ärgerlich zu überprüfen.

Wenn Sie das vollständige Error Objekt sehen möchten und alle Informationen, die sie toString() Methode trägt Umgehung, könnten Sie einfach JSON.stringify verwenden:

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