在对 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();
});
我有一个类似这样的 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();
});