Informations d'arrière-plan
Je joue avec ma première application de test nodejs qui tente de se connecter à un mongodb distant.
Problème:
La connexion échoue avec le message suivant:
admin@testdev:~/Documents/nodejs_tests$ Sudo nodejs index.js
Server has started.
Request for / received
About to route a request for: /
inside db connect method
Request for /favicon.ico received
About to route a request for: /favicon.ico
inside db connect method
MongoError: connect ECONNREFUSED
null
MongoError: connect ECONNREFUSED
null
Voici la logique pour se connecter:
function connect_nimble() {
console.log("inside db connect method");
MongoClient.connect("mongodb://10.1.1.1:27017/test", function(err,db) {
console.log(err);
console.log(db);
if(!err) {
console.log("booya! Connected to mongo");
return true;
}
});
}
Ce que j'ai vérifié jusqu'à présent:
Je me suis assuré que le serveur de base de données utilise le port 27017. Voici ce que je vois dans les journaux de mongodb lorsque je redémarre la base de données:
admin@mongotest:~$ tail -f /var/log/mongodb/mongod.log
2015-07-21T09:52:41.452-0500 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2015-07-21T09:52:41.452-0500 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2015-07-21T09:52:41.452-0500 I CONTROL [initandlisten]
2015-07-21T09:52:41.452-0500 I CONTROL [initandlisten] db version v3.0.4
2015-07-21T09:52:41.452-0500 I CONTROL [initandlisten] git version: 0481c958daeb2969800511e7475dc66986fa9ed5
2015-07-21T09:52:41.452-0500 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1f 6 Jan 2014
2015-07-21T09:52:41.452-0500 I CONTROL [initandlisten] build info: Linux ip-10-45-73-23 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 BOOST_LIB_VERSION=1_49
2015-07-21T09:52:41.452-0500 I CONTROL [initandlisten] allocator: tcmalloc
2015-07-21T09:52:41.452-0500 I CONTROL [initandlisten] options: { config: "/etc/mongod.conf", net: { bindIp: "127.0.0.1" }, storage: { dbPath: "/var/lib/mongodb" }, systemLog: { destination: "file", logAppend: true, path: "/var/log/mongodb/mongod.log" } }
**2015-07-21T09:52:41.470-0500 I NETWORK [initandlisten] waiting for connections on port 27017**
Je me suis assuré d'avoir une base de données appelée "test" en démarrant "mongo" ... puis en entrant et en sortant de la base de données de test à l'aide des commandes "use test"/"use admin".
Je ne crois pas que l'autorisation est activée. Voici ce que j'ai dans le fichier mongo.conf:
# Turn on/off security. Off is currently the default #noauth = true #auth = true
Et pour le prouver, pour accéder à la base de données de test sur le serveur via la ligne de commande, il suffit de taper "mongo", puis, par défaut, je suis dans la base de données de test. Je pense donc pouvoir supposer en toute sécurité que je n'ai aucune authentification en cours.
Juste au cas où, j'ai également vérifié le numéro de port de netstat:
admin @ mongotest: ~ $ Sudo netstat -taupen | grep mongo tcp 0 0 127.0.0.1:27017 0.0.0.0:* ÉCOUTER 117 6465150 18792mongod
admin @ mongotest: ~ $
Je lis actuellement le manuel pour voir s'il y a autre chose que je devrais vérifier. Je suis aussi en train de lire les différents posts de stackoverflow similaires, mais je ne me suis pas encore trouvé de réponse.
Aucune suggestion?
Je vois dans vos journaux que Mongo écoute 127.0.0.1. Ceci est probablement votre problème. Vous devrez modifier le paramètre de configuration de l'adresse bind-ip pour permettre à Mongo d'écouter des adresses IP spécifiques ou toutes. Vous pouvez trouver comment faire cela ici: Impossible de se connecter à mongodb en utilisant l'ordinateur ip
Ouvrez un terminal.
Tapez mongod &
et vérifiez le stacktrace.
Ceci est un exemple de démarrage raté
I STORAGE [initandlisten] exception in initAndListen: 29 Data directory /data/db not found., terminating
I NETWORK [initandlisten] shutdown: going to close listening sockets...
I NETWORK [initandlisten] shutdown: going to flush diaglog...
I CONTROL [initandlisten] now exiting
Pour résoudre ce problème, créez le dossier/data/db
Dans le terminal, tapez mkdir /data/db
Tapez à nouveaumongod
Ça marche !!
[initandlisten] ** WARNING: Access control is not enabled for the database.
I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
I CONTROL [initandlisten]
I CONTROL [initandlisten]
I CONTROL [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000