#node.js #reactjs #axios #next.js
Вопрос:
например, для
(async() => {
let apiRes = null;
try {
apiRes = await axios.get('https://silex.edgeprop.my/api/v1/a');
} catch (err) {
console.error(err);
} finally {
console.log(apiRes);
}
})();
in finally
, apiRes
вернет значение null.
Даже когда api получает ответ 404, в ответе все равно есть полезная информация, которую я хотел бы использовать.
Как я могу использовать ответ на ошибку finally
, когда axios выдает ошибку.
Комментарии:
1. Досадно, что полезная информация, о которой вы говорите, находится в
err
? Я не понимаю , почему вы хотите, чтобы он был вfinally
, а не вcatch
, но если вы это сделаете, просто сохраните его вcatch
переменной, к которой вы можете получить доступ вfinally
.2. @T. J. Crowder ошибка в
catch
не содержит ответа api. если я смогу обойти это, то ваш метод сработает !3. Да, это так. (Я только что просмотрел документацию.)
Ответ №1:
Согласно документации, полный ответ доступен в качестве response
свойства для ошибки.
Поэтому я бы использовал эту информацию в catch
блоке:
(async() => {
let apiRes = null;
try {
apiRes = await axios.get('https://silex.edgeprop.my/api/v1/a');
} catch (err) {
console.error("Error response:");
console.error(err.response.data); // ***
console.error(err.response.status); // ***
console.error(err.response.headers); // ***
} finally {
console.log(apiRes);
}
})();
Но если вы хотите finally
, чтобы он был вместо этого, просто сохраните его в переменную, которую вы можете там использовать:
(async() => {
let apiRes = null;
try {
apiRes = await axios.get('https://silex.edgeprop.my/api/v1/a');
} catch (err) {
apiRes = err.response;
} finally {
console.log(apiRes); // Could be success or error
}
})();
Комментарии:
1. Вы также можете просмотреть определение
err
типа здесь , чтобы найти другие полезные данные 🙂
Ответ №2:
Согласно документации AXIOS (здесь: https://github.com/axios/axios) вы можете передать validateStatus: false
объект конфигурации любому запросу axios.
напр.
axios.get(url, { validateStatus: false })
axios.post(url, postBody, { validateStatus: false })
Вы также можете передать функцию, подобную этой: validateStatus: (status) => status === 200
Согласно документам, поведение по умолчанию-это функция, которая возвращает значение true, если (200 <= статус
Комментарии:
1. Спасибо! использовал это как вариант
const options = { method: 'GET', headers: { 'Accept': 'application/json'}, url: 'url, validateStatus: false };
2. Спасибо, сработало как надо.