Mongoose没有保存数据而没有错误

Exc*_*ons 4 mongoose mongodb node.js

我有这个代码

      User.findOne({ email: req.body.email }, function(err, user) {
        if (user) {
          return res.status(400).json([{ msg: 'The email address you have entered is already associated with another account.' }]);
        }
        user = new User({
          name: req.body.name,
          email: req.body.email,
          password: req.body.password,
          mobile: req.body.mobile
        });
        user.save(function(err) {
          res.json({ token: generateToken(user), user: user });
        });
      });
Run Code Online (Sandbox Code Playgroud)

我尝试用邮递员发送请求,我确实得到了用户对象的回复,这意味着保存功能中没有错误

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJleGNlcHRpb25zLnNnIiwic3ViIjoiNTc5NWQ0NzQxYmEzZWQwODE1ZTgzY2NmIiwiaWF0IjoxNDY5NDM3MDQ0LCJleHAiOjE0NzAwNDE4NDR9.2otkcPkJgsXvR8QOHAojDJ5YCxR7Uc2E4ApS77T55F8",
  "user": {
    "__v": 0,
    "created_at": "2016-07-25T08:57:24.612Z",
    "updated_at": "2016-07-25T08:57:24.612Z",
    "name": "Test",
    "email": "Test@hotmail.com",
    "password": "$2a$10$3UmABiDPeo6iHZ.DFbwOO.1ANpUWQmwr86bYbTmRuFedsbDcE0bbC",
    "mobile": 12345,
    "_id": "5795d4741ba3ed0815e83ccf"
  }
}
Run Code Online (Sandbox Code Playgroud)

但是我的数据库中没有这个条目.我用Robomongo检查了我的数据库,我确信没有数据.我错过了什么?

Aji*_*hik 8

保存集合时无法处理错误,请更换您的user.save函数

user.save(function(err){
      if(err){
           console.log(err);
           return;
      }

      res.json({ token: generateToken(user), user: user });
});
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您将能够跟踪数据是否已保存以及可能存在的相关错误.


aha*_*rat 5

这与OP的具体情况无关,但是对于其他在修改Mixed对象属性后尝试保存失败的人,您必须致电markModified(path)让Mongoose知道该属性已更改。

person.anything = { x: [3, 4, { y: "changed" }] }; // anything is 'Mixed' in the schema
person.markModified('anything');
person.save(); // anything will now get saved
Run Code Online (Sandbox Code Playgroud)

在此处查看猫鼬文档的“混合”部分

  • 这解决了我的“save()”不持久的问题。 (2认同)
  • 这就是我所需要的。我的 save() 返回一个包含我所做更改的对象,但永远不会保留。`markModfied()` 解决了我的问题。 (2认同)

小智 5

我知道这听起来很愚蠢,但是 Mongoose 使用复数形式的集合名称,所以

mongoose.model('User' ...
Run Code Online (Sandbox Code Playgroud)

保存到用户集合。我花了几个小时才刷新 mongoDB 客户端并意识到我的所有文档都在“用户”而不是“用户”中。