【问题标题】:Mongoose save doesn't work "id is not defined"猫鼬保存不起作用“未定义ID”
【发布时间】:2017-03-08 03:39:51
【问题描述】:

这是我第一次使用 Mongoose,保存功能对我不起作用...

关于用户模型文件:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var User = mongoose.model('User', {
  name: Schema.Types.Mixed,
  gender: String,
  email: String
});

module.exports = User;

在我的用户控制器文件上:

// Create a user
router.post('/', function(req, res) {
  var user = new User(req.body);
  user._id = mongoose.Types.ObjectId();
  user.save(function(err) {
    if (err) {
      return res.status(500).json({
        error: "Error creating user: " + err
      });
    }

    return res.status(200).end();
  });
});

我尝试了所有方法,但无法将用户对象保存到数据库:“未定义 ID” 在 db 上,_id 是 ObjectId。

谢谢。

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    mongoose.model receives collection name and a Schema as arguments,不是普通对象。

    所以你应该改用下面的代码:

    var schema = new mongoose.Schema({
      name: Schema.Types.Mixed,
      gender: String,
      email: String
    });
    var User = mongoose.model('User', schema);
    

    【讨论】:

    • 我已经尝试过您的解决方案,但我仍然收到此错误消息。
    【解决方案2】:

    也许我们可以改变代码结构&&删除“user._id”,请测试这段代码:

    *模型文件:

    var mongoose = require('mongoose');
    var Schema = mongoose.Schema;
    
    var UserSchema = new Schema({
      name: Schema.Types.Mixed,
      gender: String,
      email: String
    });
    
    module.exports = mongoose.model('User', UserSchema);
    

    *控制器文件:

    // Create a user
    router.post('/', function(req, res) {
      var user = new User(req.body);
      user.save(function(err) {
        if (err) {
          return res.status(500).json({
            error: "Error creating user: " + err
          });
        }
    
        return res.status(200).end();
      });
    });
    

    【讨论】:

    • 我已经尝试过您的解决方案,但我仍然收到此错误消息。
    • angular.js:13642ReferenceError: id 未在 fn 的 m.$scope.createUser (UserController.js:133) 处的 Object.userService.createUser (UserService.js:71) 处定义(eval at compile (angular.min.js:1), :4:221) at b (angular.js:15628) at e (angular.js:25172) at m.$eval (angular.js:17378) at m.$apply (angular.js:17478) 在 HTMLInputElement. (angular.js:25177) 在 HTMLInputElement.dispatch (jquery.min.js:3) 在 HTMLInputElement.r.handle (jquery.min.js: 3)(匿名函数)@angular.js:13642
    猜你喜欢
    • 2015-11-16
    • 1970-01-01
    • 2016-11-04
    • 2021-03-10
    • 2018-04-10
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多