Сохраните соединение MongoDB в переменной, используя Node

Я пытаюсь сохранить элемент подключения внутри переменной, чтобы я мог повторно использовать его в других методах, выполняющих вставку, удаление и т. д.

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

let _db;

connect = function () {
    MongoClient.connect("mongodb://localhost:27017", {useNewUrlParser: true}, function (err, client) {
        _db = client.db("SomeDB");
    });
};

addTestCollection = function () {
    _db.collection('Persons', function (err, collection) {

        collection.insertOne({id: 1, firstName: 'Steve', lastName: 'Jobs'});
        collection.insertOne({id: 2, firstName: 'Bill', lastName: 'Gates'});
        collection.insertOne({id: 3, firstName: 'James', lastName: 'Bond'});

        _db.collection('Persons').count(function (err, count) {
            if (err) throw err;

            console.log('Total Rows: ' + count);
        });
    });
};

connect();
addTestCollection();

Строка, которая пытается создать коллекцию «Люди», возвращает ошибку «Не удается прочитать коллекцию свойств неопределенного».


person Community    schedule 23.06.2019    source источник
comment
Функция connect() имеет асинхронный обратный вызов, поэтому вы получаете доступ к переменной _db до ее назначения.   -  person l2ysho    schedule 23.06.2019
comment
Привет @RichardSolár Спасибо за ваш ответ. Есть ли у вас какие-либо рекомендации о том, как следует изменить код, чтобы получить соединение и повторно использовать его для других целей?   -  person    schedule 23.06.2019
comment
Добро пожаловать в JS - мир обратного звонка! Как видите, почти асинхронные функции в js — это функции обратного вызова, просто код js с правилом js. Почему вам нужен другой путь?   -  person hoangdv    schedule 23.06.2019
comment
@GeorgiosG. Я рекомендую вам использовать utils.promisify и обрабатывать соединение как обещание или в async/await. Посмотрите на это stackoverflow.com/questions/23771853/   -  person l2ysho    schedule 23.06.2019