【问题标题】:Can't return the result from Axios无法从axios返回结果
【发布时间】:2021-12-14 08:52:01
【问题描述】:

这些天我正在做一个全栈项目。这也是我的第一个全栈项目。所以我今天想出了一个问题。 所以我的后端将数据存储在 MongoDB 中,这个函数将数据发布到 MongoDB 数据库,如果成功则返回数据响应。如果不成功则返回错误。我的后端代码与此相关:

exports.registerOnlineUser = (req, res) => {
  User.findOne({ email: req.body.email }).exec((error, user) => {
    if (error) {
      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,
        });
      }
    });
  });
};

所以前端的保存数据功能是这样的。在这个函数中

console.log(响应);

也可以正常工作。它正在记录我输入的数据。

const saveFormData = async () => {
    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;
      });
  };

但下面的函数是总是为结果返回一个空值。因此,当我调用 this 和 console.log 时,我将 saveFormData 的返回值设为 null。

try {
  const result = await saveFormData();

  console.log(result);
  alert('Your registration was successfully submitted!');
} catch (e) {
  alert(`Registration failed! ${e.message}`);
}

那么当我调用它时为什么它会为该函数返回空值以及如何解决该问题? 提前致谢。

【问题讨论】:

  • 您是否检查过 registerOnlineUser 被正确调用并且 req.body 包含预期的正文?
  • 是的。此外,在 saveFormData 函数中的 console.log(response) 也可以正常工作。它记录返回的数据。但问题是我无法 console.log 在 try-catch 块中记录结果。

标签: node.js reactjs axios react-fullstack


【解决方案1】:

saveFormData 没有返回值。 try/catch 中的return 语句只针对这些,对上面的函数没有影响。由于您已经使用 try/catch 块进行错误处理,因此您可以使用:

const saveFormData = async () => {
    return axios({
      method: 'post',
      url: 'http://localhost:7000/userInfo/registerOnline',
      data: registerData,
      validateStatus: (status) => {
        return true;
      },
    })
}

【讨论】:

  • 哦,非常感谢。这是我的第一个项目。这就是为什么我会犯一些小错误。再次感谢您的回答。节省了我很多时间。
【解决方案2】:

您的 saveFormData 函数没有返回任何内容

const saveFormData = async () => {
    return axios({ //you need to return in your saveFormData scope also
      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;
      });
  };

【讨论】:

  • 哦,非常感谢。我是新手。这就是为什么会发生这样的事情。再次感谢您为我节省了很多时间。
猜你喜欢
  • 2020-11-09
  • 2021-07-23
  • 2019-02-06
  • 2020-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-07
相关资源
最近更新 更多