MongoClient.connect不执行回调函数

时间:2017-09-26 13:08:49

标签: node.js mongodb mocha

我对node.js比较陌生。尝试使用mocha框架和mongodb驱动程序测试与mongodb的连接。

Node.js版本 - 6.11.3

Mongodb驱动程序版本 - 2.2.31

Mondodb版本 - 3.4.7

这是我的js文件:

var should = require("should");
var expect = require('chai').expect;
var cfg = require('../config');
var uri = cfg.mongouri;
var MongoClient = require('mongodb').MongoClient, Logger = 
require('mongodb').Logger;

Logger.setLevel('debug');
describe("mongoconnection", function () {

describe("fetch data", function () {

    it("should fetch data from db", function (done) {
        MongoClient.connect(uri,function(err, db) {
                if (err) {
                    throw err;
                } else {
                    console.log("successfully connected to the database");
                }
                db.close();
            });
        done();
    });
});
});

然而,这部分代码

function(err, db) {
            if (err) {
                throw err;
            } else {
                console.log("successfully connected to the database");
            }
            db.close();
        }

永远不会被执行,我无法建立连接,例如我既没有控制台日志也没有例外。

调试信息:

  

[DEBUG-Connection:9352] 1506430786041使用选项创建连接0 [{“host”:HOST,“port”:PORT,“size”:5,“keepAlive”:true,“keepAliveInitialDelay”:300000,“noDelay “:真正的” connectionTimeout “:30000,” 了socketTimeout “:360000,” SSL “:真实的,” CA “:空,” CRL “:空,” 证书 “:为空,” rejectUnauthorized “:假的,” promoteLongs“: true,“promoteValues”:true,“promoteBuffers”:false,“checkServerIdentity”:true}] {type:'debug',     消息:'使用选项创建连接0 [{“host”:HOST,“port”:PORT,“size”:5,“keepAlive”:true,“keepAliveInitialDelay”:300000,“noDelay”:true,“connectionTimeout”: 30000 “了socketTimeout”:360000, “SSL”:真实的, “CA”:空, “CRL”:空, “证书”:为空, “rejectUnauthorized”:假的, “promoteLongs”:真实的, “promoteValues”:真实, “promoteBuffers”:假的, “checkServerIdentity”:真正}]”,     className:'Connection',     pid:9352,     日期:1506430786041}

还检查了连接字符串是否正确,我可以通过另一个应用程序(在SoapUI中执行的groovy脚本)与它建立连接。

我在这一点上陷入困​​境,有人可以帮助我,提前谢谢。

1 个答案:

答案 0 :(得分:2)

您正在从done()的异步回调之外的Mocha中调用MongoClient.connect。所以在它甚至可以连接到数据库之前调用done()

将您的代码更改为:

it("should fetch data from db", function (done) {
    MongoClient.connect(uri,function(err, db) {
            if (err) {
                throw err;
            } else {
                console.log("successfully connected to the database");
            }
            db.close();
            done();
    });
});