gpt4 book ai didi

javascript - Node.js mongodb 驱动程序异步/等待查询

转载 作者:IT老高 更新时间:2023-10-28 13:05:18 39 4
gpt4 key购买 nike

我有一个使用 mongodb native 驱动程序的 node.js 应用程序。在使用 Node v8.9.1 将我的应用程序代码迁移到 async/await 的过程中,我正在努力为 mongodb 查询找到一种优雅的方式。mongodb 驱动程序的主要问题是,所有查询都使用回调,其中 promise 函数对于异步方法是必需的。

替代方案:

  • mongoose- promise 不推荐使用查询,它强制使用 Schema 模型,这对我的应用程序来说有点开销。
  • mongoist - 据说很棒,因为它在构建时考虑到了 async/await 并完全 promise ,但是 SSL 连接到 mongodb 的错误和糟糕的文档 - 让我远离了这个解决方案。

我以优雅的方式成功实现的唯一解决方法是使用 callback-promise npm 包将 mongodb 驱动程序 API 转换为完全 promise 。

对于优雅的高性能方式有什么新鲜想法吗?

最佳答案

由于所有答案都缺少一些位(捕获 block ,检查客户端不是 null),因此我提供了自己的解决方案。使用 Mongo server v4.0.7 和 Node JS driver 3.2.2 测试。

请注意,该示例是一个控制台程序,我们在 finally block 中关闭与服务器的连接。在 Web 应用程序中,连接被重用。见 Node Mongo docs .此外,错误会记录在 Winston 或 Morgan 等库中,而不是控制台记录。

const MongoClient = require('mongodb').MongoClient;

const url = 'mongodb://localhost:27017';

async function findOne() {

const client = await MongoClient.connect(url, { useNewUrlParser: true })
.catch(err => { console.log(err); });

if (!client) {
return;
}

try {

const db = client.db("testdb");

let collection = db.collection('cars');

let query = { name: 'Volkswagen' }

let res = await collection.findOne(query);

console.log(res);

} catch (err) {

console.log(err);
} finally {

client.close();
}
}

await findOne();

关于javascript - Node.js mongodb 驱动程序异步/等待查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47370487/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com