1

我尝试简单地将我的 mongodb 库中的新用户保存到控制器文件中:

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

在调试模式下,我可以看到 user.save() 没有执行没有错误......

我不知道为什么,因为我在用户名/密码/电子邮件字段中得到了正确的值。

这是我的模型文件:

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

编辑 :

在我的 app.js 中,我有到 mongodb 的连接:

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

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

2 回答 2

1

我将所有(控制器+模型)分组到一个文件中进行测试:

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

我也遇到了同样的问题……不明白。可能是 Express 配置中的问题?

编辑 :

问题解决了:

应用程序.js

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

模型.js

exports.userModel = userSchema;
于 2013-01-13T13:11:25.070 回答
0

当您创建猫鼬模式时,您应该使用关键字“new”:

var userSchema = new mongoose.Schema({
    /*...*/
});
于 2015-01-21T21:42:02.360 回答