Node.js 连接到mongodb时出错

Node.js 连接到mongodb时出错,node.js,mongodb,Node.js,Mongodb,我正在使用包启动app.js文件中的mongodb服务器。我知道这是可行的,因为当我的脚本运行时,我可以看到Robomongo上的集合以及运行进程列表中的mongod.exe。问题是试图连接到名为testDB的数据库。下面是注释代码 //start mongodb server //this works var nrc = require('node-run-cmd'); var cmd = '..\\mongodb\\mongod --dbpath '+__dirname+'\\db'; nr

我正在使用包启动app.js文件中的mongodb服务器。我知道这是可行的,因为当我的脚本运行时,我可以看到Robomongo上的集合以及运行进程列表中的mongod.exe。问题是试图连接到名为testDB的数据库。下面是注释代码

//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包()中使用回调

将connect函数放在回调函数中


您可能也只想在这里启动express。

检查您的mongodb服务器是否正在运行它正在根据进程列表和RoboMongoOK运行,所以我想现在我已经解决了您的问题。。。将连接延迟几秒钟。这是因为mongod是守护进程。它不是从套接字开始接受连接,而是需要一些时间。另外,由于是守护进程,父进程将在完成数据库引导之前关闭。顺便说一句,正确的方法是始终保持数据库运行实际上,它不起作用。正在启动的服务器不会被认为完成了我相信哦,你是对的。node run cmd可能会在从mongod.exe返回良好状态后立即返回,但它尚未侦听连接。可能有一个npm模块用于在端口可用时向您发出警报,但您也可以使用setInterval尝试每500毫秒连接一次。