gpt4 book ai didi

node.js - Mongoose UPDATE 功能不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 02:10:59 24 4
gpt4 key购买 nike

我正在处理我的项目的用户帐户部分。我成功完成了 GET、POST 和 DELETE 方法,现在缺少 PUT。

当用户提交更新用户表单时,req.body将是这样的

{ user:
{ firstName: 'asas',
lastName: 'assa',
studentId: '1234',
email: 'as@as.as',
password: '123'
}
}

我的架构如下所示:

const userSchema = new Schema({
cuid: { type: 'String', required: true },
firstName: { type: 'String', required: true },
lastName: { type: 'String', required: true },
studentId: { type: 'Number', required: true },
password: { type: 'String', required: true },
email: { type: 'String', required: true },
dateAdded: { type: 'Date', default: Date.now, required: true },
lastLogin: { type: 'Date', default: null, required: false },
});

最后我的更新函数如下所示。

export function updateUser(req, res) {

console.log(req.body)
firstName = sanitizeHtml(req.body.user.firstName );
lastName = sanitizeHtml(req.body.user.lastName);
studentId = sanitizeHtml(req.body.user.studentId);
email = sanitizeHtml(req.body.user.email);
password = sha512(req.body.user.password).toString('hex');

let update = { firstName, lastName, studentId, email, password };

User.findOneAndUpdate(req.params.cuid,update,function(err,updated){
if(error){
return res.status(500).send(err);
}else{
return res.json({ user: updated });
}
});
}

我不明白为什么我的 put 方法不起作用,也许第二双眼睛可以看到这个缺陷。

最佳答案

你已经很接近了。问题是你没有正确传递 id。 MongoDB 正在寻找对象形式的标识符。您已经写过:

User.findOneAndUpdate(req.params.cuid,update,function(err,updated){

您需要做的是将参数分成单独的对象:

User.findOneAndUpdate({ _id: req.params.cuid }, { $set: update }, function(err, updated) {

此外,您需要使用$set,否则您将覆盖整个对象。 $set 告诉 Mongo 仅更新通过 update 对象指定的字段,您在上面的几行中定义了该对象。

关于node.js - Mongoose UPDATE 功能不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42137468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com