Felipe Nipo Ferreira
Felipe Nipo Ferreira

Reputation: 169

Mongoose save doesn't work "id is not defined"

It's my first time using Mongoose and the save function is not working for me...

On user model file:

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

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

module.exports = User;

On my user controller file:

// 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();
  });
});

I tried everything but I can't save the user object to the database: "id is not defined" On the db the _id is a ObjectId.

Thanks.

Upvotes: 0

Views: 923

Answers (2)

lefdilia
lefdilia

Reputation: 170

maybe we can change the code structure && remove "user._id", test please this code :

*model file:

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);

*controller file:

// 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();
  });
});

Upvotes: 0

Felipe Sabino
Felipe Sabino

Reputation: 18215

mongoose.model receives collection name and a Schema as arguments, not an regular object.

So you should use the following code instead:

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

Upvotes: 1

Related Questions