为什么mongodb发现()从来没有得到我的callback

我正在尝试使用mongodb(使用mogoose)和使用restify的node.js构build类似rest的API。 我是mongo世界的绝对新手,我不确定问题出在哪里。 这是数据库连接的问题,还是别的?

所以,我这样做: rest-server.js

//start server var restify = require('restify'); var server = restify.createServer(); server.use(restify.bodyParser()); //connect db var config = require('./Config.js'); var mongoose = require('mongoose'), db = mongoose.createConnection('localhost', 'travelers'), Schema = mongoose.Schema, ObjectId = mongoose.SchemaTypes.ObjectId; db.on('error', console.error.bind(console, 'DB connection error:')); db.once('open', function callback() { console.log('db connection open'); }); var LoginModel = require('./models/LoginModel.js').make(Schema, mongoose); var LoginResource = require('./resource/LoginResource.js')(server, LoginModel); 

LoginModel.js

 function make(Schema, mongoose) { var LoginSchema = new Schema({ //id: (?) username: String, password: String, traveler_id: Number, contact_id: Number, last_login: Date, token: String }); return mongoose.model('Login', LoginSchema); } module.exports.make = make; 

LoginResource.js

 exports = module.exports = function (server, LoginModel) { var LoginRepository = require('../repository/LoginRepository.js'); server.get('/login/:username/:password', function (req, res, next) { LoginRepository.getLogin(req, res, next, LoginModel); }); } 

LoginRepository.js

 function getLogin(req, res, next, LoginModel) { var query = LoginModel.find({ username: req.params.username, password: req.params.password}); query.exec(function (err, docs) { console.log('got it!'); res.send(docs); }); } 

testing查询curl localhost:8080 / login / qqq / www

所以我从来没有res.send(docs); 其实,我没有添加任何东西的数据库。 我只是想知道,查询没有find任何东西。

更新:我不明白为什么,但是这个问题可以解决,如果我改变数据库连接代码是这样的:

 //connect db var config = require('./Config.js'); var mongoose = require('mongoose/'); db = mongoose.connect(config.creds.mongoose_auth), Schema = mongoose.Schema; 

(使用mongoose.connect并将dbSchema vars定义为全局variables)

但在这种情况下, db.on()db.once()会抛出一个exception“没有这样的方法”。

换句话说 – 问题嗯…解决了,但我仍然不知道为什么。 这看起来像一个有用的链接: github上的server.js示例

执行查询时,通过调用mongoose.model()创build的模型使用Mongoose的默认连接池。 默认连接池是通过调用mongoose.connect()来创build的,并且使用创build的模型进行的任何查询都将排队,直到您调用完成为止。

你也可以通过调用db = mongoose.createConnection() db.model()来创build单独的连接池(可以有自己的模型!),但是你必须使用db.model()来创build模型,这就是为什么事情原来并不适合你。