Mongoose Model.save()在从node.js应用程序调用时挂起

我试图学习节点和mongo为了build立一个简单的networking应用程序/教自己多一点关于Web应用程序。 但是,当我调用Model.save()时,继续函数似乎永远不会执行,数据也不会被保存。

以下是我到目前为止:

/* app.js */ var express = require('express') , app = express() , routes = require('./routes') , http = require('http') , path = require('path') , mongoose = require('mongoose') , db , Track , models = require('./models.js'); app.configure(function(){ app.set('port', process.env.PORT || 3000); 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(express.cookieParser('secretstuff')); app.use(express.session()); app.use(app.router); app.use(require('less-middleware')({ src: __dirname + '/public' })); app.use(express.static(path.join(__dirname, 'public'))); app.use(function(err, req, res, next){ console.error(err.stack); res.send(500, 'Something broke!'); }); }); models.defineModels(mongoose, function(){ app.Track = Track = mongoose.model('Track'); db = mongoose.createConnection('localhost','nextrak') }); app.get('/', routes.index); app.get('/dbTest', function(req, res){ console.log("Here goes..."); var t = new Track({ name: "TestTrack", artist: "Artist", tags: ["test"], next: ["track1","track2"] }); console.log("Test Track:"); console.log(t); t.save(function(){ if(err) console.log("Error! Couldn't complete dbTest successfully."); else console.log("Aw yiss, got dbTest working"); }) }); http.createServer(app).listen(app.get('port'), function(){ console.log("Express server listening on port " + app.get('port')); }); /*models.js*/ function defineModels(mongoose, cont){ var Schema = mongoose.Schema; Track = new Schema({ 'name': { type: String, index: true }, 'artist': String, 'tags': [String], 'next': [String], }); mongoose.model('Track', Track); cont(); } exports.defineModels = defineModels; 

没有错误抛出,并且mongo日志表明,当我启动我的应用程序时,5个新的连接被启动。 没有新的日志出现(除[clientcursormon]日志)。 当我在Chrome中加载/ dbTest时,该应用输出以下内容:

开始…

  Test Track: { name: 'TestTrack', artist: 'Basik', _id: 5031606aa11cf95815000001, next: [ 'track1', 'track2' ], tags: [ 'test' ] } 

Mongo似乎configuration正确。 当我有节点运行Mongoose引导你的简单的“入门”脚本,一切正常。

任何人都可以指出我做错了吗?

您尚未为Mongoose创build一个默认连接。 replace这个:

 db = mongoose.createConnection('localhost','nextrak') 

有了这个:

 db = mongoose.connect('localhost', 'nextrak'); 

夫妇其他尼特:

  1. 您将models设置为models.js中的全局variables
  2. 你需要在你的t.savecallback中添加一个err参数。

首先,如果你只需要一个连接,你应该使用mongoose.connect()。

其次,我认为你正在混合轨道模式和轨道模型。 这是两件独立的事情。 新的Schema()创build一个Schema对象,它传递给mongoose.model()。 mongoose.model的结果(它似乎是你丢弃)是你想要创build一个新的实例存储在数据库,而不是架构时使用的。