mongoose findbyidandupdate在ive $set时不更新user,我的函数有什么问题,req.body什么都不返回

lx0bsm1f  于 2023-08-06  发布在  Go
关注(0)|答案(1)|浏览(62)

我得到了200响应,但它似乎没有更新用户,我还使用令牌来匹配它与用户ID,然后检查他们是否更新密码,在这种情况下,我将散列它与bcrypt。
我有控制台记录的req.body和它返回一个空对象,因此我认为这是为什么它不更新,我想知道为什么会这样?

router.put('/:id', verify, async(req, res) => {
    if (req.user.id === req.params.id || req.user.isAdmin) {
        if (req.body.password){
            req.body.password = await bcrypt.hash(req.body.password, 5)
        }
        try {
            const updatedUser = await User.findByIdAndUpdate(req.params.id, {$set: req.body},{new: true})
            res.status(200).send(updatedUser)
            } catch (error) {
                res.status(500).send(error)
            }
    } else {
        res.status(403).send("You are not allowed to update this user")
    }
})

字符串
下面是用户的模式:

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: ""
    },
    isAdmin: {
     type: Boolean,
     default: false
    } 
}, {timestamp: true}
)

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

but5z9lq

but5z9lq1#

这看起来像一个快速后端,对吧?
如果你的请求体是空的,显然没有什么会被更新。确保发送格式为JSON的请求(如{isAdmin:true}),并使用一些东西来解析body请求,如bodyParser(https://expressjs.com/en/resources/middleware/body-parser.html
如果您需要更多帮助,请发布完整的API请求,请求体的console.log和完整的.explain()(https://masteringjs.io/tutorials/mongoose/explain

相关问题