Por que axios joga em status < 200 || status >= 300
? veja defaults.js#L84
Um erro HTTP 500 significa que alcançamos o servidor e até obtivemos uma resposta válida usando o protocolo http.
Do ponto de vista do aplicativo, um erro HTTP 500 pode ser considerado uma exceção, mas isso está em um nível de abstração diferente e totalmente não relacionado à abstração HTTP.
Para ser compatível com a próxima especificação de busca, acho importante que os axios não sejam lançados no caso de respostas HTTP válidas.
A especificação de busca especifica uma propriedade response.ok
, para que o desenvolvedor do aplicativo possa identificar facilmente o resultado da operação HTTP, acredito que uma abordagem semelhante possa ser útil para axios.
Veja aqui mais detalhes sobre a especificação de busca:
https://fetch.spec.whatwg.org/#dom -response-ok
https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
Acho que você pode usar a opção de configuração validateStatus para sempre resolver quando houver uma resposta do servidor. dos documentos:
// `validateStatus` defines whether to resolve or reject the promise for a given
// HTTP response status code. If `validateStatus` returns `true` (or is set to `null`
// or `undefined`), the promise will be resolved; otherwise, the promise will be
// rejected.
validateStatus: function (status) {
return status >= 200 && status < 300; // default
}
Correto, mas meu ponto é que isso não deve ser o padrão. Na verdade, isso nem deveria ser configurável.
Entendemos sua preocupação, mas o Axios não pretende substituir fetch
nem imitar seu comportamento. Nós nem mesmo o usamos como um adaptador para fazer as chamadas (mantemos o XHR no momento).
O Axios tenta ser o mais configurável possível, fornecendo os padrões que a maioria das pessoas usará. Nesse caso, as pessoas tendem a verificar o código de status logo após uma resposta do servidor. Por exemplo:
fetch(url).then(verifyStatus).then(...);
É por isso que existem pacotes como fetch-check-http-status .
Queremos evitar aquela estrutura que se repete com tanta frequência. Se você deseja resolver com qualquer resposta válida do servidor, sempre pode definir validateStatus: false
.
Comentários muito úteis
Correto, mas meu ponto é que isso não deve ser o padrão. Na verdade, isso nem deveria ser configurável.