在对 Express 应用程序进行 运行 Mocha 测试后关闭 MongoDB 连接

Closing a MongoDB connection after running Mocha tests for an Express application

我有一个类似这样的 Express 应用程序。

const app = express();

...
...
...

router.post(...);
router.get(...);
router.delete(...);

app.use('/api/v1', router);

MongoClient.connect(mongoUri, { useNewUrlParser: true })
    .then(client => {
        const db = client.db('db_name');
        const collection = db.collection('collection_name');
        app.locals.collection = collection;
    })
    .catch(error => console.error(error));

const server = app.listen(settings.APIServerPort, () => console.log(`Server is listening on port ${settings.APIServerPort}.`));

module.exports = {

    server,
    knex // using this to connect to the RDBMS
}

该应用程序同时使用 RDBMS 和 Mongo。

我使用 Mocha 为应用程序编写测试并将以下块添加到 Mocha 测试。

const app = require('../app');

...test 1...
...test 2...
...test 3...
...
...
...
...test n...

after(async () => {

    await app.knex.destroy();
});

after 挂钩关闭了我与 RDBMS 的连接。

但是,我不知道如何在测试完成后关闭 MongoDB 连接。

由于保持此连接打开,测试永远不会退出并在所有测试完成后挂起 运行。

我能找到的最接近的答案是这个 -

但是,我无法为我工作。

有人可以帮忙吗?

更新 结合以下答案即可解决问题。

const mongoClient = new MongoClient(mongoUri, { useNewUrlParser: true });

mongoClient.connect()
    .then(client => {
        const db = client.db('...');
        const collection = db.collection('...');
        app.locals.collection = collection;
    })
    .catch(error => console.error(error));

const server = app.listen(settings.APIServerPort, () => console.log(`Server is listening on port ${settings.APIServerPort}.`));

module.exports = {

    server,
    knex, 
    mongoClient
}

我们可以重写 mongo 函数使其工作

const client = new MongoClient(uri);

client.connect()
    .then(client => {
        const db = client.db('db_name');
        const collection = db.collection('collection_name');
        app.locals.collection = collection;
    })
    .catch(error => console.error(error));

并且在后面的块中 -

after(async () => {

    await app.knex.destroy();
    await client.close();

});