Axios with Auth не является допустимым экземпляром axios - PullRequest
0 голосов
/ 09 ноября 2019

Я пытаюсь установить заголовки авторизации для пост-запроса axios с помощью axios.create (). У меня есть это в файле, и когда я пытаюсь импортировать функцию в свой компонент React Native, я получаю следующую ошибку:

axiosWithAuth.default().post is not a function

ниже мой код для функции:

import axios from 'axios';
import {AsyncStorage} from 'react-native';
// import AsyncStorage from '@react-native-community/async-storage'

async function axiosWithAuth() {
    const token = await AsyncStorage.getItem('userToken');
    console.log('token from asyncstorage' , token);
    return axios.create({headers : {'Content-Type': null, Authorization : token}})
}

export default axiosWithAuth;

и я использую функцию в следующем React Native Component:

import axiosWithAuth from '../utils/axiosWithAuth';

const Recipe = (props) => {

const likeIt = () => {
        console.log('like pressed');
        console.log('props', props.recipe.id);
        setLike(!like);
        axiosWithAuth().post(`API_URL`,{})
            .then(res => console.log('response from post like: ', res.data))
            .catch(err => console.log('error in posting like', err.response))
    }
return (
      <Text>This is the Recipe Component </Text>
   )
}

Ответы [ 2 ]

0 голосов
/ 11 ноября 2019

Ниже приведен код, который работал. Создайте переменную и установите ее = await axiosWithAuth (). Затем сделайте почтовый запрос от переменной. Ниже приведено определение функции axiosWithAuth:

import axios from 'axios';
import {AsyncStorage} from 'react-native';

async function axiosWithAuth() {
    const userToken = await AsyncStorage.getItem('userToken');
    console.log('userToken', userToken);
    // return axios.create({headers : {'Content-Type': null, Authorization : userToken}})
    return axios.create({headers : {Authorization : userToken}})
}

export default axiosWithAuth;

, а ниже - код, использующий функцию axiosWithAuth:

import axiosWithAuth from '../utils/axiosWithAuth';

const likeIt = async () => {
        await setLike(!like);
        console.log('liked?', like);
        const axiosAuth = await axiosWithAuth();
        console.log('axiosAuth', axiosAuth);
        if (!like) {
            axiosAuth.post(`https://url`,{})
                .then(res => {
                    console.log('response from post like: ', res.data.message);
                })
                .catch(err => console.log('error in posting like', err.response))
        } else {
            axiosAuth.delete(`https://url`)
                .then(res => console.log('res from unlike', res))
                .catch(err => console.log('err from deleting like', err))
        }
    }
0 голосов
/ 09 ноября 2019

Вы использовали async с функцией axiosWithAuth. Он возвращает Promise, а не экземпляр axios. Вы должны написать это так

(await axiosWithAuth()).post(`API_URL`,{})
    .then(res => console.log('response from post like: ', res.data))
    .catch(err => console.log('error in posting like', err.response))
...