2016-07-24 3 views
0

MongoDBをNode.jsから起動して、毎回手動で行う手間を省いていますが、どのような方法を使用するのが最適かは不明ですその問題に関しては、それをどのように組み込むか、したがってジレンマである。Node.jsからMongoDBを起動して接続する

私は、このコードが動作しない(ECONNREFUSED)理由は、mongod.exeに起動するのに十分な時間が与えられていないと考えています。真実ならば、これを取り巻く最善の方法は何でしょうか?ある種のループ?何とかDBの状態を確認していますか?同期タイマーのいくつかの並べ替え?

理想的には、MongoDBが起動していないかどうか、MongoDBが起動していないかどうか、まず起動して何か他の操作を試みた後で接続するのが理想的です。これは私にとって良い計画のように聞こえるが、幸いなことに私はどこから始めるべきか分からない。

私は本当にコーディングが新しく、私はおそらく私の目標に少し野心的です...もし何か間違っていたら、私に教えてください。

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

答えて

1

mongodbが起動して接続するまで待つことができます。ここで はあなたの例でも

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

}); 

例であるあなたは、--versionパラメータでのmongodを起動し、おそらくあなたの意図は正しい、DB自体を開始するのですか?だからちょうど--versionパラメータを落とす。

+0

ああ! '--version'パラメータを削除するだけで動作しました!私はパラメータがちょうどコンソールに何か追加の情報を表示したと思っていました。 – Dimitto

+0

MongoDBが既に実行されているかどうか確認する価値があるかどうかは分かりますか? – Dimitto

+0

はい、確かに可能です。上記のコードは、まずdbを実行してから接続するようにしています。 –

関連する問題