Reputation: 33
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
Reputation: 885
You should use keyword "new", when you are creating a mongoose Schema:
var userSchema = new mongoose.Schema({
/*...*/
});
Upvotes: 0
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