我研究猫鼬已经三天了,对这两种方法的使用我有点困惑(我知道将来会不推荐使用“ mongoose.connection()” …)
问题是:当我尝试转换(从“ mongoose.connection()”到“ mongoose.createConnection()”)此示例的action.js文件https://gist.github.com/2785463时,不为我工作…
有我的代码…
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); }; }); });
这是我的终端输出(在我的ubuntu终端上键入“ 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)。
mongoose.connect()
mongoose.connection
mongo.createConnection()
db
因此,代码的最后一部分应更改为:
更新
db.db.collectionNames(function (error, names) { if (error) { console.log('Error: '+ error); } else { console.log(names); }; });
我看不出有什么collectionNames办法Connection;看起来您必须遵循属性到本机连接对象中才能访问该对象(请参见上面的代码)。
collectionNames
Connection