簡體   English   中英

發布請求失敗后不返回錯誤 - axios, express, node.js

[英]Not returning an error after failed post request - axios, express, node.js

我正在嘗試實現密碼更改的驗證,我遇到的問題是如果出現錯誤,我沒有從服務器返回 errorMessage。 我已經設法讓它工作並在密碼更新后發回響應。 此外,我可以在后端控制台記錄錯誤消息,但它不會將帶有 errorMessage 的 object 返回到前端。

    if (!currentPassword) {
    console.log("no current password");
    return res
      .status(400)
      .json({ errorMessage: "Please confirm your current password" });
}

前面的代碼如下所示:

  handleSubmit = (event) => {
event.preventDefault();
const authorization = localStorage.getItem("accessToken");

axios
  .put(
    `${process.env.REACT_APP_SERVER_URL}/settings/password`,
    this.state.user,
    {
      headers: {
        authorization,
      },
    }
  )
  .then((res) => {
    if (res.errorMessage) {
      console.log(res, "Unsuccessful password updated");
   
    } else {
      console.log("updating - res:", res);
      this.setState({
        user: res.data,
      });
    }
  })

  .catch((err) => {
    console.log(err, "ERROR");
  });
 };

每次出現錯誤時,我都不會登錄實際的 erroMessage,但它會被捕獲。 這是什么原因?

謝謝

不是直接res ,它在res.data下可用。

axios 的響應模式

利用

if (res.data.errorMessage) {

代替

if (res.errorMessage) {

為了更好地理解,您需要console.log(res) 然后你就可以理解響應的結構了

router.put("/password", isLoggedIn, (req, res, next) => {
  const { currentPassword, newPassword, newPasswordConfirm } = req.body;

 

  User.findById(req.user._id)
    .then((user) => {
      bcrypt.compare(currentPassword, user.password).then((isSamePassword) => {
        if (!isSamePassword) {
          console.log(
            "Incorrect current password. To change your password try again!"
          );
          return res.status(400).json({
            errorMessage:
              "Incorrect current password. To change your password try again!",
          });
        }

        return bcrypt
          .genSalt(saltRounds)
          .then((salt) => bcrypt.hash(newPassword, salt))
          .then((hashedPassword) => {
            User.findByIdAndUpdate(
              req.user._id,
              { password: hashedPassword },
              { new: true }
            )
              .then((user) => {
                console.log("user's password successfully changed");
                res.status(200).json(user);
              })
              .catch((err) => {
                res.status(500).json({ errorMessage: err.message });
              });
          })
          .catch((err) => {
            res.status(500).json({ errorMessage: err.message });
          });
      });
    })
    .catch((err) => {
      console.log(err);
      res.status(500).json({ errorMessage: err.message });
    });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM