2016-07-24 15 views
0

Ich möchte die MongoDB über Node.js starten, um mir die Mühe zu ersparen, es jedes Mal manuell zu tun, aber ich bin unsicher, was die beste Methode zu verwenden ist oder wie man es einbaut und damit das Dilemma.MongoDB über Node.js starten und dann verbinden

Ich glaube der Grund, dass dieser Code nicht funktioniert (ECONNREFUSED) ist, dass die mongod.exe nicht genug Zeit zum Starten gegeben hat. Wenn das stimmt, was wäre die beste Methode dafür? Eine Art Schleife? Irgendwie den Status der DB prüfen? Eine Art synchroner Timer?

Im Idealfall sollte der Server zuerst prüfen, ob die MongoDB bereits läuft, bevor sie versucht wird, sie zu starten, und ob sie nach so vielen Versuchen, etwas anderes zu tun, nicht startet und sich verbindet. Das klingt für mich nach einem guten Plan, aber ich weiß leider nicht, wo ich anfangen soll.

Ich bin wirklich neu in der Programmierung, und ich bin vielleicht ein wenig zu ehrgeizig mit meinen Zielen ... wenn ich etwas falsch mache, bitte lass es mich wissen.

const express = require('express'); 
const bodyParser= require('body-parser'); 
const app = express(); 
const MongoClient = require('mongodb').MongoClient 
const execFile = require('child_process').execFile; 

app.use(bodyParser.urlencoded({extended: true})) 

var db 

execFile("C:/Program Files/MongoDB/Server/3.2/bin/mongod.exe", ['--version'], (error, stdout, stderr) => { 
    if (error) { 
    throw error; 
    } 
    console.log(stdout); 

}); 

MongoClient.connect('mongodb://localhost:27017/db', (err, database) => { 
    if (err) return console.log(err) 
    db = database 
    app.listen(3000, function() { 
    console.log('listening on 3000') 
    }) 
}) 

Antwort

1

Sie können warten, bis mongodb beginnt, dann verbinden. Hier ist das Beispiel

execFile("C:/Program Files/MongoDB/Server/3.2/bin/mongod.exe", ['--version'], (error, stdout, stderr) => { 
    if (error) { 
    throw error; 
    } 
    console.log(stdout); 

    MongoClient.connect('mongodb://localhost:27017/db', (err, database) => { 

    if (err) return console.log(err) 
    db = database 
    app.listen(3000, function() { 
    console.log('listening on 3000') 
    }) 
    }) 

}); 

auch in Ihrem Beispiel Sie mongod mit --Version Parameter starten und vermutlich Ihre Absicht ist es, die db sich selbst zu starten, richtig? Also einfach fallen --version Parameter.

+0

Oh wow! Wenn Sie nur den Parameter'version 'löschen, funktioniert es! Ich hatte gedacht, dass der Parameter nur einige zusätzliche Informationen auf der Konsole angezeigt und nichts mehr. – Dimitto

+0

Wissen Sie, ob es sich lohnt, zuerst zu prüfen, ob MongoDB bereits läuft? – Dimitto

+0

Ja, sicher, Sie könnten. Der obige Code stellt lediglich sicher, dass Sie zuerst die Datenbank ausführen und dann eine Verbindung herstellen. –