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

时间:2016-07-25 09:03:46

标签: node.js mongodb mongoose

我有这段代码

{
  "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"
  }
}

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

monthLength

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

6 个答案:

答案 0 :(得分:7)

保存集合时无法处理错误,请将user.save函数替换为

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

      res.json({ token: generateToken(user), user: user });
});

通过这种方式,您将能够跟踪数据是否被保存以及相关错误可能是什么。

答案 1 :(得分:2)

这与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

查看Mongoose docs here的“混合”部分

答案 2 :(得分:0)

我认为这是个问题只需尝试这个,更改用户对象的变量名称

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.' }]);
        }
        newUser = new User({
          name: req.body.name,
          email: req.body.email,
          password: req.body.password,
          mobile: req.body.mobile
        });
        newUser.save(function(err,saveUser) {
          res.json({ token: generateToken(saveUser), user: saveUser });
        });
      });

答案 3 :(得分:0)

对于遇到此问题的其他人,您的模型isArchived SchemaType必须是Product(Sku sku, string name, string description, bool isArchived)类型。

假设我们将模式和模型定义为:

_id

我们希望使用ObjectId 1234更新用户名:

var userSchema = new mongoose.Schema({
  _id: mongoose.Schema.ObjectId,
  userID: Number,
  name: String
});

var Users = mongoose.model('collectionName', userSchema);

Mongoose将通过执行以下操作成功更新它:

userID

如果我们在Users.findOne({userID: 1234}, function(err, user) { user.name = "Jane Doe"; user.save(function(err) { // ... } } 中将users.update({ _id: ObjectId("anObjectID") }, { '$set': { name: 'Jane Doe' } }) 的SchemaType设置为_id,那么它就会这样做:

String

答案 4 :(得分:0)

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

mongoose.model('User' ...

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

答案 5 :(得分:0)

使用错误功能可以帮助我!

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