You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Axios发送post请求后封装的saveFormData函数返回null该如何解决?

问题原因
  • 直接原因:saveFormData 作为async函数未显式返回异步调用结果,async函数无return语句时默认返回undefined,导致外部调用拿到的返回值为空。
  • 冗余问题:代码同时混用await、.then()、.catch()三种异步处理逻辑,且你配置了validateStatus: () => true,所有HTTP状态码都不会触发axios的catch分支,现有catch逻辑完全无效。
  • 后端隐患(不影响本次返回值问题,但存在逻辑漏洞):后端代码中查询用户失败的错误分支未加return,错误触发后还会继续执行后续逻辑,可能导致重复返回响应报错。
解决方案

前端代码修复(二选一即可)

写法1:保留现有写法,仅添加return语句

const saveFormData = async () => {
    // 开头添加return,将整个异步调用的结果返回
    return await axios({
      method: 'post',
      url: 'http://localhost:7000/userInfo/registerOnline',
      data: registerData,
      validateStatus: (status) => {
        return true;
      },
    })
      .catch((error) => {
        console.log(error);
        return error
      })
      .then((response) => {
        console.log(response);
        return response;
      });
  };

写法2:简化为纯async/await写法(推荐)

去掉冗余的回调逻辑,异常统一交给外部try/catch处理,代码更易维护:

const saveFormData = async () => {
  const response = await axios({
    method: 'post',
    url: 'http://localhost:7000/userInfo/registerOnline',
    data: registerData
  })
  console.log(response)
  // 直接返回接口数据,外部可直接拿到用户信息
  return response.data
}

如果需要保留所有状态码都不默认抛出异常的逻辑,可自行判断状态码主动抛出错误:

const saveFormData = async () => {
  const response = await axios({
    method: 'post',
    url: 'http://localhost:7000/userInfo/registerOnline',
    data: registerData,
    validateStatus: () => true
  })
  console.log(response)
  if (response.status >= 400) {
    throw new Error(response.data.message || '注册请求失败')
  }
  return response.data
}

后端代码优化(可选,修复逻辑漏洞)

给查询错误的分支添加return,避免重复响应:

exports.registerOnlineUser = (req, res) => {
  User.findOne({ email: req.body.email }).exec((error, user) => {
    if (error) {
      // 添加return终止后续逻辑
      return res.status(400).json({ message: error });
    }
    // 剩余原有代码不变
    if (user) {
      return res.status(400).json({
        message: 'User exists already',
      });
    }
    const { fullName, email, address, cardName, cardNo, expDate, cvv } = req.body;
    const userCategory = 'Online';
    const newUser = new User({
      fullName,
      email,
      address,
      cardName,
      cardNo,
      expDate,
      cvv,
      userCategory,
    });
    newUser.save((error, data) => {
      if (error) {
        return res.status(400).json({
          message: error,
        });
      }
      if (data) {
        return res.status(201).json({
          user: data,
        });
      }
    });
  });
};

内容的提问来源于stack exchange,提问作者Tharindu Gimras

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:24:08