Mongodb find()方法冻结了Nodejs

时间:2013-05-15 16:27:46

标签: node.js mongodb

我正在使用Node启动webapps开发,所以我对这项技术很陌生。

我已经做了几个例子,并设法让它运行。

然而,现在我正在尝试使用Mongodb,但我无法使其正常运行。似乎连接正在工作但是当我调用find()方法并且我转到localhost:3000 / near(这是生成findAll文档的url)时,浏览器花费大约半分钟加载并完成返回任何内容(的 ERR_EMPTY_RESPONSE )。

这是我的代码:

app.js

app.get('/near', function(req, res){
    server.findAll( function(error,docs){
        res.render('near', { 
                title: 'Cerca tuyo!',
                places:docs
        });
    })
});

这是我的Server.js

//constructor
AppServer = function(host, port) {
  this.db= new Db('node-mongo-places', new Server(host, port, {safe: false}, {auto_reconnect: true}, {}));
  this.db.open(function(){});
};

//Devuelve la colección de "places"
AppServer.prototype.getCollection= function(callback) {
  this.db.collection('places', function(error, places_collection) {
    if( error ) callback(error);
    else callback(null, places_collection);
  });
};


//Devuelve todos los contenidos de la DB places
AppServer.prototype.findAll = function(callback) {
    this.getCollection(function(error, places_collection) {
      if( error ) callback(error)
      else {
        places_collection.find().toArray(function(error, results) {
          if( error ) callback(error)
          else callback(null, results)
        });
      }
    });
};

我已经调试了编写console.log()的代码,似乎它没有从places_collection.find().toArray(function(error, results) {

到达回调函数

知道服务器为什么不返回任何内容?


!!!编辑:

我找到了一些代码来测试与mongodb的连接是否正常,并且它说它不是:[Error: failed to connect to [localhost:27017]]

所以问题在于连接。我应该先运行mongodb吗?我认为app.js本身会为我做到这一点!

1 个答案:

答案 0 :(得分:1)

得到了这个问题的答案:

如上所述,我认为npm install mongodb会安装整个事情。但是,它没有,所以我设法通过执行sudo apt-get install mongodb来修复它。

安装后,应用程序本身就会运行mongodb。

我将此添加到我的mongodb open()方法中,以便我可以看到发生了什么:

this.db.open(function(error,db){
    if(error) {
        console.log(error);
    } else {
        console.log("connected to mongod with no problems...");
    }
  });