mongoose.connection()和mongoose.createConnection()之间的混淆

我一直在研究mongoose三天,我对这两种方法的使用有点困惑(我知道“mongoose.connection()”将在以后被弃用…)

问题是:当我试图转换(从“mongoose.connection()”到“mongoose.createConnection()”)这个例子https://gist.github.com/2785463的action.js文件不为我工作…

有我的代码…

var mongoose = require('mongoose'), db = mongoose.createConnection('localhost', 'test'); db.on('error', function () { console.log('Error! Database connection failed.'); }); db.once('open', function (argument) { console.log('Database connection established!'); mongoose.connection.db.collectionNames(function (error, names) { if (error) { console.log('Error: '+ error); } else { console.log(names); }; }); }); 

还有我的terminal输出(在我的ubuntuterminal上input“node test.js”..)

 Database connection established! /home/_user_/Scrivania/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:437 throw err; ^ TypeError: Cannot call method 'collectionNames' of undefined at NativeConnection.<anonymous> (/home/_user_/Scrivania/test2.js:11:25) at NativeConnection.g (events.js:192:14) at NativeConnection.EventEmitter.emit (events.js:93:17) at open (/home/_user_/Scrivania/node_modules/mongoose/lib/connection.js:408:10) at NativeConnection.Connection.onOpen (/home/_user_/Scrivania/node_modules/mongoose/lib/connection.js:415:5) at Connection._open (/home/_user_/Scrivania/node_modules/mongoose/lib/connection.js:386:10) at NativeConnection.doOpen (/home/_user_/Scrivania/node_modules/mongoose/lib/drivers/node-mongodb-native/connection.js:47:5) at Db.open (/home/_user_/Scrivania/node_modules/mongoose/node_modules/mongodb/lib/mongodb/db.js:287:14) at Server.connect.connectCallback (/home/_user_/Scrivania/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:235:7) at g (events.js:192:14) 

如果您不调用mongoose.connect()mongoose.connection不包含打开的连接。 你应该使用你的mongo.createConnection()调用的返回值来代替(你保存到db )。

所以最后一段代码应该改成:

更新

 db.db.collectionNames(function (error, names) { if (error) { console.log('Error: '+ error); } else { console.log(names); }; }); 

Connection上看不到一个collectionNames方法; 看起来像你必须遵循属性到本地连接对象来访问(见上面的代码)。