Вопрос, который вы связали, использует обещания повсюду, в то время как вы используете версию обратного вызова connect.
return MongoClient.connect(this.url, {useNewUrlParser: true}, (err, db) => ...
Затем вы вызываете его, не возвращаясь на свой сервер:
Connection.connectToDB();
console.log(`listening to port: ${port} on http://127.0.0.1:3000}/`);
Таким образом, нет никакой гарантии, что ваше соединение будет установлено к тому времени, как поступит ваш первый запрос API. Фактически, если вы это сделали:
Connection.connectToDB();
console.log(`listening to port: ${port} on http://127.0.0.1:3000}/`);
Connection.db.collection('tweets').find({});
Оно будет прерываться каждый раз, так какConnection.db по-прежнему будет нулевым.
В приведенном вами примере использование Promises защищает от этого.В частности, обратите внимание на метод подключения:
static connectToDB() {
if ( this.database ) return Promise.resolve(this.database)
// ** USING THE PROMISE VERSION OF CONNECT **
return MongoClient.connect(this.url, this.options)
.then(db => this.db = db)
}
и ваш код использования также должен использовать обещания:
return Connection.connectToDB()
.then(() => {
// do something here
});