axios__WEBPACK_IMPORTED_MODULE_0 ___ default.a [方法]不是函数

时间:2019-03-10 20:49:57

标签: reactjs axios

当我请求后端时,我遇到了错误。我在另一个项目上有类似的代码,没有问题。但这会引起问题

我的代码:

import axios from 'axios';
export default function apiCall(method, path, data) {
    console.log(method, url, data); 
    return new Promise((resolve, reject) => {
        return axios[method](path, data)
                .then(res => {
                    return resolve(res.data);
                })
                .catch((err) => {
                    console.log(err)
                    reject(err)
                });
    });
}

api调用功能

apiCall('POST', `${process.env.REACT_APP_BASE_URL}/`, {standard, subject, totalMarks, totalQuestions} )
        .then(data =>{
            console.log(data);

        })
        .catch(err=>{
            console.log(err);
            return this.props.addError(err.message)

        });

2 个答案:

答案 0 :(得分:0)

请注意javascript中的对象区分大小写的事实,因此,访问obj['post']obj['POST']将返回不同的值。

axios具有方法getpost等,以小写表示,您正尝试通过大写访问它们,因此您得到了未定义的值。

您可以通过将方法变量转换为小写来解决此问题。

import axios from 'axios';

export default function apiCall(method, path, data) {
    return new Promise((resolve, reject) => {
        return axios[method.toLowerCase()](path, data)
                .then(res => {
                    return resolve(res.data);
                })
                .catch((err) => {
                    console.log(err)
                    reject(err)
                });
    });
}

顺便说一句,axios方法已经返回了Promises,因此您可以使用它来简化代码。

import axios from 'axios';

export default function apiCall(method, path, data) {
    return axios[method.toLowerCase()](path, data)
           .then(res => res.data)
           .catch((err) => {
                console.log(err);
                return Promise.reject(err);
           });
}

答案 1 :(得分:0)

我遇到了同样的问题,felixmosh 给了我钥匙

const { data } = await axios.PUT(
     `/api/users/profile/update/`,
     user,
     config
     )

我修复了它,改变了方法,它对我有用;)

const { data } = await axios.put(
     `/api/users/profile/update/`,
     user,
     config
     )