#react-native #axios #asyncstorage
#react-native #axios #asyncstorage
Вопрос:
В моем проекте react native я использую async-storage
для хранения токена авторизации. Я использую Axios
как клиентскую библиотеку HTTP, когда я настраиваю заголовок, я хотел бы использовать пустую строку в качестве значения для заголовка Authorization
, если в нем не хранится значение AsyncStorage
. В противном случае используйте значение из хранилища.
Ниже приведен код, который я пробовал, но я застрял на том, как поместить код для извлечения значения из хранилища, поскольку это await
вызов. Я не могу выразить это так, как сейчас, жалуется компилятор. Но экспортируемый Axios является объектом в файле. Итак, есть предложения?
import AsyncStorage from '@react-native-community/async-storage';
import {STORAGE_KEYS} from '../constants';
// I can't put this line here
const myToken = await AsyncStorage.getItem(STORAGE_KEYS.MyToken);
export default Axios.create({
baseURL: 'http://192.168.10.207:3000',
headers: {
Authorization: myToken ? myToken : '',
},
});
Ответ №1:
Перехватчики Axios
Одним из решений было бы использовать Interceptors
: https://github.com/axios/axios#interceptors
import AsyncStorage from '@react-native-community/async-storage';
import {STORAGE_KEYS} from '../constants';
import axios from 'axios;
const instance = return axios.create({ baseURL: 'http://192.168.10.207:3000' });
instance.interceptors.request.use(async function (config) {
const myToken = await AsyncStorage.getItem(STORAGE_KEYS.MyToken);
config.headers['Authorization'] = myToken ? myToken : '';
return config;
});
export default instance;
(не тестировалось)
Комментарии:
1. Спасибо, так ли это, что в строке кода при создании
instance
я также могу объявлять заголовки с жестко заданными значениями, а затем использовать перехватчик для добавления новых заголовков?2. Да, вы можете! Насколько я понимаю, вы можете полностью изменить весь запрос с помощью перехватчиков! Дайте мне знать, если у вас возникнут проблемы с этим…