NodeJS 为什么我的put请求没有返回任何findByIdAndUpdate

jogvjijk  于 2023-06-22  发布在  Node.js
关注(0)|答案(1)|浏览(109)

我正在测试我的put请求,它没有返回任何东西,当我试图通过客户端使用它时,它也不起作用。当我在失眠中测试它时,我得到了一个200的消息,但正文返回null,而不是更新的用户。
下面是通过客户端请求的代码,它也可以更新用户的个人资料照片:

const handleSubmit = async (e) => {
    e.preventDefault()
    const updatedUser = {
      userId: user._id,
      username,
      email,
      password,
    }
    if (file){
      const data = new FormData()
      const filename = Date.now()+file.name;
      data.append("name",filename)
      data.append("file",file)
      updatedUser.profilePic = filename;
      try {
        await axios.put("http://localhost:5000/api/users/"+user._id, updatedUser)
      } catch (error) {
        console.log(error)
      }
    }
  }

下面是通过我的API请求的代码

router.put("/:id", async (req, res) => {
    if (req.body.userId === req.params.id) {
      if (req.body.password) {
        const salt = await bcrypt.genSalt(10);
        req.body.password = await bcrypt.hash(req.body.password, salt);
      }
      try {
        const updatedUser = await User.findByIdAndUpdate(
          req.params.id,
          {
            $set: req.body,
          },
          { new: true }
        );
        res.status(200).json(updatedUser);
      } catch (err) {
        res.status(500).json(err);
        console.log(err)
      }
    } else {
      res.status(401).json("You can update only your account!");
    }
  });

下面是我的用户模式:

const mongoose = require('mongoose');

const UserSchema = new mongoose.Schema({
    username: {
        type: String,
        required: true,
        unique: true,
    },
    email:{
        type: String,
        required: true,
        unique: true,
    },
    password: {
        type: String,
        required: true,
    },
    profilePic:{
        type: String,
        default:"",
    }
},
{timestamps:true}
)

module.exports = mongoose.model("User", UserSchema)
vkc1a9a2

vkc1a9a21#

试试这个代码:

const updatedUser = await User.findByIdAndUpdate(
  req.params.id,
  {
    $set: req.body,
  },
  { new: true, useFindAndModify: false }
);

相关问题