9

私は3日間マングースを研究してきましたが、これら2つの方法の使用について少し混乱しています(「mongoose.connection()」は将来廃止されることを知っています...)

問題は次のとおりです。この例のaction.jsファイルを(「mongoose.connection()」から「mongoose.createConnection()」に)変換しようとすると、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ターミナルで「nodetest.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)
4

1 に答える 1

4

電話をかけない場合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ネイティブ接続オブジェクトにアクセスするには、プロパティをたどってネイティブ接続オブジェクトにたどり着く必要があるようです(上記のコードを参照)。

于 2012-10-31T21:09:41.240 に答える