我正在嘗試學(xué)習(xí)關(guān)于MongoDB的課程,但在運(yùn)行以下代碼時(shí)遇到問(wèn)題,這些代碼應(yīng)該允許我連接到mongoDB。我有兩個(gè)模塊:
mongoConnect.js
import { MongoClient} from 'mongodb';
import {EventEmitter} from 'events';
const uri = "<MYCONNSTRING>";
const dbName = "test";
class MongoConnect extends EventEmitter{
constructor(){
super();
this.mongoClient = new MongoClient(uri,{useUnifiedTopology:true});
}
connect() {
this.mongoClient.connect((err,mongodb)=>{
if(err) throw err;
console.log('Connection to DB Established');
MongoConnect.blogDatabase = mongodb.db(dbName);
this.emit('dbConnection');
})
}
};
export default MongoConnect;
App.js(主模塊文件)
import express from 'express';
import MongoConnect from './mongoConnect.js';
const port = process.env.PORT || 3000;
const app = express();
const mongoConnect = new MongoConnect();
mongoConnect.on('dbConnection', ()=> {
app.listen(port, ()=>{
console.log(`server listening on port: ${port}`);
});
});
mongoConnect.connect();
問(wèn)題是:connect()
方法內(nèi)部的回調(diào)永遠(yuǎn)不會(huì)執(zhí)行。我在控制臺(tái)中看不到消息,也不知道如何繼續(xù)。
根據(jù)您提供的代碼,您似乎正在使用MongoDB Node.js驅(qū)動(dòng)程序版本3.x或更高版本,它引入了連接API中的更改。新驅(qū)動(dòng)程序中的
connect
方法返回promise,而不是接受回調(diào)函數(shù)。要解決這個(gè)問(wèn)題,可以在
MongoConnect
類(lèi)中修改connect
方法,使其使用promise而不是回調(diào)。以下是代碼的更新版本:通過(guò)在
this.mongoClient.connect()
之前使用await
關(guān)鍵字,執(zhí)行將暫停,直到建立連接或出現(xiàn)錯(cuò)誤。如果發(fā)生錯(cuò)誤,它將被捕獲在catch
塊中,您可以在那里進(jìn)行相應(yīng)的處理。通過(guò)此修改,一旦建立連接,就應(yīng)該發(fā)出
dbConnection
事件,并且服務(wù)器應(yīng)該開(kāi)始偵聽(tīng)指定的端口。請(qǐng)確保將
mongodb
包更新到最新版本,并確保您的MongoDB連接字符串(<MYCONNSTRING>
)有效。