Mongoose UPDATE功能不起作用

时间:2017-02-09 13:01:35

标签: node.js mongodb mongoose

我正在处理项目的用户帐户部分。我成功完成了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方法不起作用,也许第二双眼睛可以看到这个缺陷。

3 个答案:

答案 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对象指定的字段,您在上面定义了几行。