我正在使用node-run-cmd包在我的app.js文件中啓動mongodb服務器。我知道這是有效的,因爲我可以在腳本運行時看到Robomongo上的集合以及正在運行的進程列表中的mongod.exe。問題是試圖連接到名爲testDB的數據庫。以下是註釋的代碼。連接到mongodb時出錯
//start mongodb server
//this works
var nrc = require('node-run-cmd');
var cmd = '..\\mongodb\\mongod --dbpath '+__dirname+'\\db';
nrc.run(cmd);
//setup
var express = require('express');
var MongoClient = require('mongodb').MongoClient;
var app = express();
app.use(express.static('public'));
app.set('view engine', 'ejs');
//connect to mongo
//this fails to connect to db testDB
var url = 'mongodb://localhost:27017/testDB';
MongoClient.connect(url, function(err, db) {
if(!err) {
console.log("connection successful");
}
else{
console.log(err.message)
}
});
這裏是err.message
failed to connect to server [localhost:27017] on first connect
任何想法,我做錯了這裏。我的假設是db連接在服務器完全啓動之前嘗試,但我不完全確定。
編輯:
所以這是什麼東西,時機的問題。我嘗試了以下,並連接到數據庫。除了我在這裏以外,是否有這樣的優雅方式?
function connect(){
var url = 'mongodb://localhost:27017/testDB';
MongoClient.connect(url, function(err, db) {
if (!err) {
console.log("connection successful");
}
else {
console.log(err.message)
}
});
}
setTimeout(connect, 10000);
檢查您的mongodb服務器是否正在運行 – georoot
它正在運行根據進程列表和robomongo – bvmcode
好吧,所以我認爲現在我得到了您的問題正確...延遲連接幾秒鐘。這是因爲mongod是守護進程。它不是以一個套接字來開始接受需要一段時間的連接。另外,由於作爲守護進程,父進程將在完成數據庫引導之前關閉。順便說一句,正確的方法是始終保持數據庫運行 – georoot