连接到mongodb时出错
问题描述:
我正在使用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);
答
你应该在node_run_cmd包(https://www.npmjs.com/package/node-run-cmd#callback-style)使用回调。
将您的连接功能放在回调中。
你可能也只想在这里开始表达。
检查您的mongodb服务器是否正在运行 – georoot
它正在运行根据进程列表和robomongo – bvmcode
好吧,所以我认为现在我得到了您的问题正确...延迟连接几秒钟。这是因为mongod是守护进程。它不是以一个套接字来开始接受需要一段时间的连接。另外,由于作为守护进程,父进程将在完成数据库引导之前关闭。顺便说一句,正确的方法是始终保持数据库运行 – georoot