web-dev-qa-db-fra.com

Erreur ECONNREFUSED lors de la connexion à mongodb à partir de node.js

Je sais que je suis très stupide et noble, mais j'espère que quelqu'un pourra m'aider à configurer une connexion de base de données à mongodb à partir de node.js sur un mac.

J'ai installé mongodb en utilisant homebrew, semble avoir assez bien fonctionné. J'ai démarré le serveur (mongod) en tant qu'utilisateur connecté localement et ouvert un deuxième terminal et confirmé que je peux me connecter à celui-ci à l'aide de mongo. Lorsque je lance mongo, le message "Connexion à: localhost: 27017/test" s'affiche, suivi d'une invite de commande. Quelques commandes dans le shell mongo, tout semble fonctionner là-bas. A laissé les deux terminaux ouverts et en fonctionnement.

J'ai également confirmé que je pouvais accéder à l'interface Web sur localhost: 28017. 

J'ai installé node.js et ajouté le paquet mangouste. Maintenant, essayez de vous connecter en utilisant une application super simple node.js (fonctionnant également en tant qu'utilisateur connecté localement):

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');

Je reçois l'erreur suivante

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: connect ECONNREFUSED
    at errnoException (net.js:901:11)
    at Object.afterConnect [as oncomplete] (net.js:892:19)

Frapper ma tête contre le mur en essayant d'obtenir quelque chose d'aussi simple à travailler. Qu'est-ce que je rate?

Edit: Voici les logs de Mongod. Comme vous pouvez le constater, j'ai essayé plusieurs fois et toutes échouent assez instantanément:

Thu Dec  5 08:19:43.700 [initandlisten] MongoDB starting : pid=14412 port=27017 dbpath=/usr/local/var/mongodb 64-bit Host=mobadmins-MacBook-Pro-3.local
           08:19:43.700 [initandlisten] db version v2.4.8
           08:19:43.700 [initandlisten] git version: nogitversion
           08:19:43.700 [initandlisten] build info: Darwin mobadmins-MacBook-Pro-3.local 12.4.0 Darwin Kernel Version 12.4.0: Wed May  1 17:57:12 PDT 2013; root:xnu-2050.24.15~1/RELEASE_X86_64 x86_64 BOOST_LIB_VERSION=1_49
           08:19:43.700 [initandlisten] allocator: tcmalloc
           08:19:43.700 [initandlisten] options: { bind_ip: "127.0.0.1", config: "/usr/local/etc/mongod.conf", dbpath: "/usr/local/var/mongodb", logappend: "true", logpath: "/usr/local/var/log/mongodb/mongo.log", rest: true }
           08:19:43.700 [initandlisten] journal dir=/usr/local/var/mongodb/journal
           08:19:43.700 [initandlisten] recover : no journal files present, no recovery needed
           08:19:43.729 [websvr] admin web console waiting for connections on port 28017
           08:19:43.729 [initandlisten] waiting for connections on port 27017
           08:22:34.561 [initandlisten] connection accepted from 127.0.0.1:52160 #3 (1 connection now open)
           08:22:34.563 [conn3] recv(): message len 1124073472 is too large. Max is 48000000
           08:22:34.563 [conn3] end connection 127.0.0.1:52160 (0 connections now open)
           08:24:41.298 [initandlisten] connection accepted from 127.0.0.1:52166 #4 (1 connection now open)
           08:24:41.304 [conn4] end connection 127.0.0.1:52166 (0 connections now open)
           08:25:06.938 [initandlisten] connection accepted from 127.0.0.1:52168 #5 (1 connection now open)
           08:25:06.943 [conn5] end connection 127.0.0.1:52168 (0 connections now open)
           08:25:18.220 [initandlisten] connection accepted from 127.0.0.1:52172 #6 (1 connection now open)
           08:25:18.225 [conn6] end connection 127.0.0.1:52172 (0 connections now open)
           08:25:38.811 [initandlisten] connection accepted from 127.0.0.1:52175 #7 (1 connection now open)
           08:25:38.816 [conn7] end connection 127.0.0.1:52175 (0 connections now open)
35
agoldencom

OK, c’était un autre cas de non-révélation des informations que j’ai postées ci-dessus. Mon application node.js était très simple, mais j'y ai ajouté quelques lignes dans mon code node.js qui a apparemment causé ce problème.

Plus précisément, j'ai fait déclarer une autre variable qui appelait un autre code qui effectuait un appel de base de données distinct à l'aide d'informations de base de données incorrectes. C'est pourquoi, lors de l'utilisation du code de Xinzz, l'erreur du journal de la console n'a pas semblé changer. Ce n'était pas réellement la commande mongoose.connect qui lançait l'erreur!

Leçon apprise, localisez le problème et commentez le code sans rapport! Désolé les gars, je savais que c'était moi être stupide.

10
agoldencom

Utilisez ce code pour configurer votre connexion mongodb:

var mongoose = require('mongoose');

var mongoURI = "mongodb://localhost:27017/test";
var MongoDB = mongoose.connect(mongoURI).connection;
MongoDB.on('error', function(err) { console.log(err.message); });
MongoDB.once('open', function() {
  console.log("mongodb connection open");
});

Assurez-vous que Mongod est en cours d'exécution lorsque vous démarrez le serveur. Utilisez-vous Express ou juste un simple serveur node.js? Quel est le message d'erreur que vous obtenez avec le code ci-dessus?

7
Xinzz

très étrange, mais dans mon cas, je change de connexion wifi ...

J'utilise un réseau wifi public et passe à ma connexion téléphonique

2
itzhar

J'ai eu le même problème. Il a été résolu en exécutant le même code dans Console administrateur .

2
Sheikh Abdul Wahid

J'avais le même problème en écrivant une simple api de repos en utilisant node.js J'ai finalement découvert que c'était à cause de blocage du wifi et raison de sécurité.essayez de le connecter une fois en utilisant votre point d'accès mobile . si c'est la raison pour laquelle il sera résolu immédiatement.

2
Adit Chauhan

J'ai eu le même problème. Ce que j'ai fait est d'exécuter la commande mongodb dans un autre terminal. Ensuite, exécutez mon application dans un autre onglet. Cela a résolu mon problème. Cependant, j'essaie d'autres solutions, telles que la création d'un script pour exécuter mongodb avant que la connexion soit établie.

0
Ezrqn Kemboi

parfois, vous devez vérifier la légalité de l'IP, du pare-feu, de la redirection de port, etc. si votre base de données cible se trouve sur d'autres ordinateurs.

0
goodhyun