【问题标题】:Save with Mongoose与猫鼬一起保存
【发布时间】:2013-01-12 18:47:15
【问题描述】:

我尝试简单地将我的 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');

【问题讨论】:

  • 你的mongoose.connect()呢?
  • 在我的 app.js 中,然后我需要我的 model.js 和我的 controller.js
  • 好的,那么您到底遇到了什么错误?
  • 没有错误...只是没有进入user.save()
  • 对不起,我误解了'没有错误地执行':) 听起来像this issue

标签: javascript node.js mongodb express mongoose


【解决方案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 配置中的问题?

编辑:

问题已解决:

app.js

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

model.js

exports.userModel = userSchema;

【讨论】:

    【解决方案2】:

    在创建 mongoose Schema 时,您应该使用关键字“new”:

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

    【讨论】:

    • 您不需要new,因为Schema 构造函数的编写方式都一样。
    猜你喜欢
    • 1970-01-01
    • 2015-11-16
    • 2018-06-11
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    • 2018-12-30
    • 2019-03-20
    相关资源
    最近更新 更多