Axios调用post方法报post is not a function错误排查
报错:
(0 , _dbExpress.default)(...).post is not a function 问题背景
调用axios封装实例发起注册POST请求时,立即触发上述报错。经Postman验证服务端接口运行正常,可排除服务端故障;同版本依赖(axios@^0.27.2、expo@~45.0.0)的其他项目中,相同业务逻辑可正常运行。
关联代码
注册请求逻辑
const signup = dispatch => async ({email, password, username}) => { try { const response = await dbExpress().post('/signup', {email, password, username}); await AsyncStorage.setItem('token', response.data.token); dispatch({type: 'signin', payload: response.data.token}); navigate('mainFlow'); } catch (error) { console.log(error.message); dispatch({type: 'add_error', payload: 'Something went wrong with sign up'}); } };
Axios拦截器配置
dbExpress.interceptors.request.use( async (config) => { const token = await AsyncStorage.getItem('token'); console.log("*** inside api") if (token) { console.log("*** token exist") config.headers.Authorization = `Bearer ${token}`; } return config; }, (err)=>{ console.log("*** reject " + err.message); return Promise.reject(err); } ); export default dbExpress;
相关依赖版本
"axios": "^0.27.2", "expo": "~45.0.0",
根因分析
dbExpress是已经通过axios.create()初始化完成的axios实例对象,本身直接挂载了post/get等请求方法,不需要加()作为函数执行。
代码中写的dbExpress()是把实例对象当作普通函数执行,返回值不是axios实例,自然不存在.post方法,因此触发报错。其他同逻辑项目可正常运行,是因为调用时没有额外添加这对括号。
修复方法
将注册逻辑中的请求调用代码修改为直接调用实例方法,去掉多余的括号:
// 修改前 const response = await dbExpress().post('/signup', {email, password, username}); // 修改后 const response = await dbExpress.post('/signup', {email, password, username});
注意:所有调用该封装实例的位置,都不要额外添加括号执行,直接使用实例挂载的请求方法即可。
内容的提问来源于stack exchange,提问作者nicc
相关产品推荐
相关产品推荐

