我正在尝试学习node和mongo,以便构建一个简单的Web应用程序/自学一些关于Web应用程序的知识。但是,当我调用Model.save()时,似乎永远不会执行continuation函数,并且不会保存数据。
这是我到目前为止所拥有的:
/* 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似乎配置正确。当我有节点运行Mongoose引导您完成的简单“入门”脚本时,一切正常。
有人能指出我做错了什么吗?
答案 0 :(得分:14)
默认情况下,您尚未为Mongoose创建连接。替换这个:
db = mongoose.createConnection('localhost','nextrak')
有了这个:
db = mongoose.connect('localhost', 'nextrak');
结合其他尼特:
Track
设置为models.js err
回调中添加t.save
参数。答案 1 :(得分:2)
首先,如果您只需要一个连接,则应使用mongoose.connect()。
其次,我认为你正在混淆赛道架构和赛道模型。这是两件不同的事情。 new Schema()创建一个Schema对象,该对象将传递给mongoose.model()。 mongoose.model(它似乎你要丢弃)的结果是你想要在创建一个新实例来存储在数据库而不是模式时使用的。