微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – Node.js mongodb驱动程序async / await查询

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

备择方案:

> mongoose-promises查询已被弃用,它强制使用Schema模型,这对我的应用程序来说有点开销.
> mongoist-据称很棒,因为它建立时考虑到async / await并完全承诺,但是与mongodb的SSL连接和糟糕的文档错误 – 让我远离这个解决方案.

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

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

解决方法:

由于所有答案都缺少一些位(catch块,检查客户端是否为null),我自带解决方案.使用Mongo服务器v4.0.7和Node JS驱动程序3.2.2进行测试.

请注意,该示例是一个控制台程序,我们在finally块中关闭与服务器的连接.在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();
    }
}

findOne();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐