web-dev-qa-db-fra.com

'process.nextTick (function () {throw err;})' - Indéfini n'est pas une fonction (mongodb/mongoose)

J'essaie de me connecter à mon mongodb en utilisant nodejs et socket.io. Je suis en mesure de me connecter à la base de données car la connexion est acceptée dans ma console, mais du côté de nodejs, dès que 

Connexion à mongodb: // localhost: 27017 établi via mangouste

il échoue immédiatement avec 

process.nextTick (function () {throw err;}) ^ TypeError: indéfini est pas une fonction à showCollections **

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

}

Et voici le contenu de mon dossier de base de données:

_tmp (empty folder)
local.0
local.ns
mongod.lock

Je lance mongodb en tapant mongod --dbpath folder et le message "attend les connexions sur le port 27017".

De plus, mes node_modules de package.json (npm)

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

Merci beaucoup pour votre aide...

Trace de la pile:

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

MODIFIER:

J'ai également ces problèmes lorsque j'essaie d'exécuter l'instance de nodejs:

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

J'ai essayé de les résoudre comme d'autres questions ici le diraient, mais rien n'a fonctionné non plus ...

13
Fane

D'après les informations fournies, il semble que vous utilisiez le pilote mongodb 2.0. La méthode db.collectionNames a été supprimée. Consultez la section "Objet Db" de cette page - https://github.com/mongodb/node-mongodb-native/blob/0642f18fd85037522acf2e7560148a8bc5429a8a/docs/content/tutorials/changements-from-1.0.md#L38

Ils l'ont remplacé par listCollections. Vous devriez obtenir le même effet avec:

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

Ne devriez-vous pas spécifier le chemin complet et disposer d'un module d'exportation?
...quelque chose comme:

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

Si je me trompe c'est parce que je n'aime pas moongodb :)

0
user4415984

Pour moi, cette erreur a commencé à apparaître lorsque j'ai dû forcer mon ordinateur à s'éteindre, car il est devenu insensible. La prochaine fois que j'ai démarré mon serveur express, cette erreur est survenue. Je l'ai résolu en exécutant npm install [email protected] --save dans le terminal . Cette erreur peut survenir lorsque votre serveur ou votre base de données est fermé de force et que du code n'est pas sauvegardé dans les coulisses.

0
aakata