Подтвердить что ты не робот

'process.nextTick(function() {throw err;})' - Undefined не является функцией (mongodb/mongoose)

Я пытаюсь подключиться к моему mongodb, используя nodejs и socket.io. Я могу подключиться к базе данных, потому что я получаю "соединение принято" в моей консоли, но на стороне узла, как только я - действительно - получаю

Подключение к mongodb://localhost: 27017, установленное через mongoose

он сразу же перестает работать с

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

Я запускаю mongodb, набрав mongod --dbpath папку, и он успешно "ожидает подключения на порту 27017".

Кроме того, мой node_modules из package.json (npm)

"dependencies": {
    "express": "^4.9.6",
    "socket.io": "latest",
    "mongodb": "~2.0",
    "mongoose": "*"
  }

Большое спасибо за вашу помощь...

StackTrace:

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

EDIT:

У меня также возникают эти проблемы при попытке запустить экземпляр nodejs:

{ [Error: Cannot find module '../build/Release/bson'] code: 'MODULE_NOT_FOUND' }
js-bson: Failed to load c++ bson extension, using pure JS version

Я попытался их исправить, поскольку другие вопросы здесь расскажут, но ничего не получилось...

4b9b3361

Ответ 1

Из предоставленной информации, похоже, вы используете драйвер mongodb 2.0. Метод db.collectionNames был удален. Просмотрите раздел "Db Object" этой страницы - 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);
        });
    }
});

Ответ 2

Нельзя указать полный путь и иметь модуль экспорта?
... что-то вроде:

mongoose.connection.db.collectionNames(function (err, names)
{
        console.log(names); // [{ name: 'dbname.myCollection' }]
        module.exports.Collection = names;
}

Если я ошибаюсь, потому что я не люблю moongodb :)