Я использую модуль Nuxt-axios с прокси.
Для обработки ошибок у меня есть общий код в
Плагины / axios.js
export default function({ $axios, __isRetryRequest, store, app, redirect , payload , next}) {
$axios.onRequest(config => {
if (app.$cookies.get('at') && app.$cookies.get('rt') && config.url != '/post_login/') {
config.headers.common['Authorization'] = `Bearer ${app.$cookies.get('at')}`;
}
});
$axios.onResponseError(err => {
const code = parseInt(err.response && err.response.status)
let originalRequest = err.config;
if (code === 401) {
originalRequest.__isRetryRequest = true;
store
.dispatch('LOGIN', { grant_type: 'refresh_token', refresh_token: app.$cookies.get('rt')})
.then(res => {
originalRequest.headers['Authorization'] = 'Bearer ' + app.$cookies.get('at');
return app.$axios(originalRequest);
})
.catch(error => {
console.log(error);
});
}
// code for 422 error
if (code == 422) {
throw err.response;
}
});
}
На странице индекса моей папки
Pages / index.vue
<template>
<section>Component data</section>
</template>
<script type="text/javascript">
export default {
async asyncData({ route, store }) {
await store.dispatch('GET_BANNERS');
}
}
</script>
Все вызовы API находятся в файле stroes / actions.js.
Теперь вопрос в том, когда я обновляю страницу index.vue, первый запрос API попадет и в случае успеха получит ответ. Но теперь, если при первом запросе ('GET_BANNERS') от asyncData он получает несанкционированную ошибку 401, я получаю ошибку ниже
Error: Request failed with status code 401
Ошибка [ERR_HTTP_HEADERS_SENT]: невозможно установить заголовки после их отправки клиенту.
как я могу это решить?
еще несколько вопросов:
1) Когда я пишу общий код ошибки в axios, исходный запрос, по которому я получил 401, как я могу снова настроить данные для сохранения (что мы обычно делаем из файла действий)?
2) может ли кто-нибудь помочь с передовой практикой прикрепить заголовки авторизации и дескриптор ошибки для 400 401 422 и т. Д.