我尝试使用nodejs和socket.io连接到 mongodb 。我可以连接到数据库,因为我接受了连接'在我的控制台中,但在nodejs方面,我 - 确实 - 得到
通过mongoose建立与mongodb:// localhost:27017的连接
它随后立即失败
process.nextTick(function(){throw err;})^ TypeError:undefined is 不是showCollections的功能**
这里是showCollections:
var showCollections = function(db, callback) {
mongoose.connection.db.collectionNames(function(error, names) {
if (error) {
throw new Error(error);
} else {
console.log("=>Listening mongo collections:");
names.map(function(cname) {
mongoose.connection.db.dropCollection(cname.name);
console.log("--»"+cname.name);
});
}
});
}
这是我的数据库文件夹的内容:
_tmp (empty folder)
local.0
local.ns
mongod.lock
我通过输入 mongod --dbpath文件夹来运行mongodb,并且它已成功等待端口27017上的连接'。
另外,来自 package.json (npm)的node_modules
"dependencies": {
"express": "^4.9.6",
"socket.io": "latest",
"mongodb": "~2.0",
"mongoose": "*"
}
非常感谢你的帮助......
堆栈跟踪:
> TypeError: undefined is not a function
> at showCollections (/usr/share/nginx/www/index.js:77:25)
> at NativeConnection.callback (/usr/share/nginx/www/index.js:46:3)
> at NativeConnection.g (events.js:199:16)
> at NativeConnection.emit (events.js:104:17)
> at open (/usr/share/nginx/www/node_modules/mongoose/lib/connection.js:485:10)
> at NativeConnection.Connection.onOpen (/usr/share/nginx/www/node_modules/mongoose/lib/connection.js:494:5)
> at /usr/share/nginx/www/node_modules/mongoose/lib/connection.js:453:10
> at /usr/share/nginx/www/node_modules/mongoose/lib/drivers/node-mongodb-native/connection.js:59:5
> at /usr/share/nginx/www/node_modules/mongoose/node_modules/mongodb/lib/db.js:200:5
> at connectHandler (/usr/share/nginx/www/node_modules/mongoose/node_modules/mongodb/lib/server.js:272:7)
修改
我在尝试运行nodejs实例时遇到这些问题:
{ [Error: Cannot find module '../build/Release/bson'] code: 'MODULE_NOT_FOUND' }
js-bson: Failed to load c++ bson extension, using pure JS version
我尝试修理它们,因为这里的其他问题会说明但是没有任何作用......
答案 0 :(得分:33)
从提供的信息来看,您似乎正在使用mongodb 2.0驱动程序。 db.collectionNames方法已被删除。查看此页面的“Db对象”部分 - https://github.com/mongodb/node-mongodb-native/blob/0642f18fd85037522acf2e7560148a8bc5429a8a/docs/content/tutorials/changes-from-1.0.md#L38
他们用listCollections取代了它。你应该得到同样的效果:
mongoose.connection.db.listCollections().toArray(function(err, names) {
if (err) {
console.log(err);
}
else {
names.forEach(function(e,i,a) {
mongoose.connection.db.dropCollection(e.name);
console.log("--->>", e.name);
});
}
});
答案 1 :(得分:0)
你不应该指定完整路径并且有一个导出模块吗?
......类似于:
mongoose.connection.db.collectionNames(function (err, names)
{
console.log(names); // [{ name: 'dbname.myCollection' }]
module.exports.Collection = names;
}
如果我错了,因为我不喜欢moongodb :)
答案 2 :(得分:0)
对我来说,当我不得不强行关闭我的电脑时,这个错误开始出现,因为它没有响应。下次我启动我的快速服务器时会弹出这个错误。我通过在终端中运行npm install mongoose@4.0 --save
来解决它。
当您的服务器或数据库强行关闭并且某些代码未在后台保存在mongod中时,可能会弹出此错误。