Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Confusion between mongoose.connection() and mongoose.createConnection()

I've been studying mongoose for three days and I'm a bit confused about the use of these two methods (i know that "mongoose.connection()" will be deprecated in the future...)

The problem is: when I'm trying to convert (from "mongoose.connection()" to "mongoose.createConnection()") the action.js file of this example https://gist.github.com/2785463 it seems to not work for me...

there's my code...

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);
    };
  });
});

and there's my terminal output (typing "node test.js" on my ubuntu terminal..)

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)
like image 927
cl0udw4lk3r Avatar asked Oct 31 '12 16:10

cl0udw4lk3r


Video Answer


1 Answers

If you don't call mongoose.connect() then mongoose.connection doesn't contain an an open connection. You should be using the return value from your mongo.createConnection() call instead (that you've saved into db).

So the last section of code should change to:

UPDATED

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

I don't see a collectionNames method on Connection; looks like you have to follow properties down into the native connection object to access that (see above code).

like image 95
JohnnyHK Avatar answered Oct 22 '22 11:10

JohnnyHK