Nodejsとsocket.ioを使用してmongodbに接続しようとしています。コンソールで「接続が受け入れられました」が、nodejs側で-実際-取得するとすぐにデータベースに接続できます
Mongooseを介してmongodb:// localhost:27017への接続が確立されました
次ですぐに失敗する
process.nextTick(function(){throw err;})^ TypeError:undefinedは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 folderと入力して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
ここの他の質問が伝えるようにそれらを修正しようとしましたが、何も機能しませんでした...
提供された情報から、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);
});
}
});
フルパスを指定してエクスポートモジュールを使用するべきではありませんか?
...何かのようなもの:
mongoose.connection.db.collectionNames(function (err, names)
{
console.log(names); // [{ name: 'dbname.myCollection' }]
module.exports.Collection = names;
}
私が間違っている場合、それは私がmoongodbを空想していないからです :)
私にとって、このエラーは、PCが応答しなくなったために強制的にシャットダウンする必要があるときにポップアップし始めました。次回エクスプレスサーバーを起動したときに、このエラーが表示されました。ターミナルでnpm install [email protected] --save
を実行して解決しました。サーバーまたはデータベースが強制的に閉じられ、一部のコードがバックグラウンドでmongodに保存されない場合、このエラーがポップアップする可能性があります。