Node.js mongojs实现新bie

Node.js mongojs实现新bie,node.js,mongodb,mongojs,Node.js,Mongodb,Mongojs,嗨,我是MongoDB和NodeJs的新手。我正在使用“mongojs”模块从mongodb简单地读取数据。守则如下: var dbname = 'XXXX'; var databaseUrl = 'mongodb://localhost:27017/'+dbname; var collections = ['candidate','cities','states','countries']; var mongojs = require('mongojs'); var db = mongojs(

嗨,我是MongoDB和NodeJs的新手。我正在使用“mongojs”模块从mongodb简单地读取数据。守则如下:

var dbname = 'XXXX';
var databaseUrl = 'mongodb://localhost:27017/'+dbname;
var collections = ['candidate','cities','states','countries'];
var mongojs = require('mongojs');
var db = mongojs(databaseUrl, collections);

db.candidate.findOne({fname:'XXX'},function(err,doc){
    if(err){
        console.log(err);
    }
    else{
        console.log(doc);
    }
});
db.close();
当我在终端中运行它们时,会出现以下错误:

{ name: 'MongoError',
  message: 'server localhost:27017 sockets closed' }

似乎db.close()是在提取数据之前执行的。我们如何处理此类问题。

上述代码是异步的。正在执行db.candidate.findOne()的操作时。节点不等待进程完成,而是开始执行另一行。因此,简单地将db.close()放在回调中就可以解决这个错误

var dbname = 'XXXX';
var databaseUrl = 'mongodb://localhost:27017/'+dbname;
var collections = ['candidate','cities','states','countries'];
var mongojs = require('mongojs');
var db = mongojs(databaseUrl, collections);

db.candidate.findOne({fname:'XXX'},function(err,doc){
    if(err){
        console.log(err);
    }
    else{
        console.log(doc);
    }
    db.close();
});
我也是node的新手。是的,@blake说的可能是对的,我们可能永远不想关闭db连接。

“异步代码”。仔细阅读<调用
db.close()
时,code>.findOne()尚未“完成”。在实际代码中,您也几乎从不关闭数据库连接。请仔细阅读。可能的副本