我正在处理项目的用户帐户部分。我成功完成了GET,POST和DELETE方法,现在我错过了PUT。
当用户提交更新用户表单时,{ 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 });
}
});
}
最后我的更新功能看起来像这样。
@media (min-width: 767px) and (max-width: 991px){
/* Undo here what was specified by Bootstrap file for screens larger than 767px and you don't want to apply */
}
我无法弄清楚为什么我的put方法不起作用,也许第二双眼睛可以看到这个缺陷。
答案 0 :(得分:0)
您没有使用findOneAndUpdate的正确结构。首先你要定义,在哪个基础上搜索id。
SetEnv PHP_VER 5_TEST
RewriteEngine On
#RewriteCond %{HTTPS} off
#RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} off
RewriteCond %{THE_REQUEST} !/pay|ok|ko|retour/ [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^(blog|www|flashgames).sample.com$
RewriteRule ^(.*) http://www.sample.com/$1 [QSA,L,R=301]
ErrorDocument 404 https://www.sample.com/index.php
希望这会有所帮助。
答案 1 :(得分:0)
我认为您需要将update参数作为对象。
第一个参数是查询对象。例如{firstName:"无论"}。 第二个参数包含更新。
例如,如果您尝试更新用户姓氏,并按名称搜索,则应该具有类似
的内容findOneAndUpdate({firstName:req.body.firstName},{lastName:req.body.lastName},function...})
我相信你试图通过id进行搜索,所以你应该把它放在像
这样的东西上findOneAndUpdate({cuid:req.body.cuid},{$set:{firstName:req.body.firstName,studentId:req.body.studentId...}),function...})
我希望我的回答对你有所帮助。
答案 2 :(得分:0)
你很亲密。问题是你没有正确传递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
对象指定的字段,您在上面定义了几行。