如何使用util的promisify函数来宣传mongoDB?

时间:2017-12-25 06:39:35

标签: node.js mongodb es6-promise

我想在MongoDB中使用promisify。我最后尝试了代码,连接正常,但函数insertOne没有。任何人都可以帮我吗?最好用' .db()。collection()'来解释原因,以及什么是上下文,如何使用以下代码使函数promisify:

a().b().c().d()

这是我的代码,如bellow。

import "babel-polyfill"
const mongoClient = require('mongodb').MongoClient
const util = require('util')
const chalk = require('chalk')

const url = 'mongodb://localhost:27017'
const dbName = ''
const collName = ''

let connect = util.promisify(mongoClient.connect).bind(mongoClient)
let insertOne = util.promisify(mongoClient.insertOne)
                .bind(mongoClient)

const main = async () => {
    try {
        await connect(url)
        insertOne({a100: 1}).db(dbName).collection(collName)
    } catch (err) {
        console.log(chalk.red(err.toString()))
    }

    mongoClient.close()
}    

main()

1 个答案:

答案 0 :(得分:2)

MongoDB驱动程序已经返回promises(参见documentation)。您不需要使用util.promisify。另外,您不必对db等问题进行collectioninsertOne链接。反之亦然。

例如:

 client = await mongoClient.connect(url)
 client.db(dbName).collection(collName).insertOne({a100: 1})

(注意,如果您使用旧的mongodb节点驱动程序2.2版,它会稍微不同,因为connect返回一个db对象 - documentation for 2.2