Chris
Chris

Reputation: 33

Save with Mongoose

I try to simply save a new User in my mongodb base into a controller file :

var mongoose = require('mongoose');
var UserModel = mongoose.model('User');

// signup
exports.create = function (req, res) {

    console.log(req.body);

    var user = new UserModel({
        username: req.body.username,
        password: req.body.password,
        email: req.body.email
    });

    user.save(function (err) {
        if (!err) {
            return console.log("created");
        }
        else {
            return console.log(err);
        }
    });
}

In debug mode, I can see that user.save() is not executed without error...

I don't know why because I get correct value in username / password / email field.

Here my model file :

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

var userSchema = mongoose.Schema({
    username: String,
    password: String,
    email: String
});

var userModel = mongoose.model('User', userSchema);

EDIT :

In my app.js I have the connection to mongodb :

 mongoose.connect('mongodb://localhost/mydb', function(err){
        if(err) {
            console.log(err);
        }
    });

    var  userModel = require('./models/user'),
        userController = require('./controllers/users');

Upvotes: 1

Views: 907

Answers (2)

JerryCauser
JerryCauser

Reputation: 885

You should use keyword "new", when you are creating a mongoose Schema:

var userSchema = new mongoose.Schema({
    /*...*/
});

Upvotes: 0

Chris
Chris

Reputation: 33

I grouped all (controller + model) in one file to test :

var express = require('express')
  , routes  = require('./routes')
  , userRoute    = require('./routes/user')
  , http    = require('http')
  , path    = require('path')
  , io      = require('socket.io')
  , mongoose = require('mongoose');

var app = express();

app.configure(function(){
  app.set('port', process.env.PORT || 8080);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'ejs');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(require('stylus').middleware(__dirname + '/public'));
  app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
  app.use(express.errorHandler());
});

mongoose.connect('mongodb://127.0.0.1/mydb', function(err){
    if(err) {
        console.log(err);
    }
    else {
        console.log("Connected to mongo DB")
    }
});

/*var userModel = require('./models/user'),
    tchatMessageModel = require('./models/tchatMessage'),
    userController = require('./controllers/users'),
    tchatMessageController = require('./controllers/tchatMessages');       */

app.get('/', routes.index);
app.get('/signup', userRoute.signup);
app.get('/signin', userRoute.signin);
//app.post('/signup', userController.create);
//app.get('/users', userRoute.list);

var Schema = mongoose.Schema;
var userSchema = Schema({
    username: String,
    password: String,
    email: String
});
var UserModel = mongoose.model('User', userSchema);
app.post('/signup', function (req, res) {

    console.log(req.body);

    var user = new UserModel({
     username: req.body.username,
     password: req.body.password,
     email: req.body.email
     });

    user.save(function (err) {
        if (!err) {
            return console.log("created");
        }
        else {
            return console.log(err);
        }
    });

});

var server = http.createServer(app);

server.listen(app.get('port'), function(){
    console.log("Express server listening on port " + app.get('port'));
});

And I get the same issue... don't understand. Maybe issue in Express configuration ?

EDIT :

Issue solved with :

app.js

mongoose.model("User", require("./models/user").userModel);

model.js

exports.userModel = userSchema;

Upvotes: 1

Related Questions