Node+Express 강의를 보고 있다. mongodb driver가 db에 연결되기 위해 connect라는 메소드를 호출한다. connect()는 콜백을 받는데 이상하게도 그 콜백을 실행하지 않는 현상을 겪었다.
mongodb 드라이버 5.0에서 MongoClient.connect()에 인수로 콜백 넣지 마라.
그거 이제 없다.
그 대신 then-catch를 하자.
로컬에서 아래 도구들을 사용하고 있다.
mongodb는 atlas에서 호스팅받아 사용하고 있다.
하려는 일은 다음과 같다.
그래서 강의에서 배운대로 아래와 같이 코드를 작성했다.
...
const MongoClient = require('mongodb').MongoClient;
const MongoURL = 'mongodb+srv://사용자이름:사용자 비밀번호@클러스터이름.uktonao.mongodb.net/GoraniDB?retryWrites=true&w=majority';
const app = express();
const port = 3000;
MongoClient.connect(MongoURL, (err, database) => {
console.log('콜백 진입했음');
if (err) {
console.log('에러에러');
console.log(err);
return;
} else {
console.log('문제없음');
app.listen(port, () => {
console.log(`Example app listening on port ${port}`);
});
const db = database.db('GoraniDB');
const collection = db.collection('MyCollection');
collection.insertOne({name:'wonjin'});
}
});
MongoClient.connect() 메소드의 콜백함수를 실행하지 않는다.
정말 말 그대로 아무것도 안나온다. 너무 답답했다.
강의에서는 mongodb driver 버전 4.3
대를 사용하고 있었다.
나는 5.0
대를 사용하고 있다.
정말 혹시나 해서 레퍼런스를 뒤져봤는데 이게 정답이었다.
그렇다. 4.3
에서는 connect인수로 콜백이 들어갔었는데, 5.0에서는 콜백이 들어가지 않는다. 😂 (그림 좌측 4.3
/ 우측 5.0
)
클래식한 해결방법이다.
MongoClient.connect(MongoURL)
.then(database => {
console.log('문제없음');
app.listen(port, () => {
console.log(`Example app listening on port ${port}`);
});
const db = database.db('GoraniDB');
const collection = db.collection('MyCollection');
collection.insertOne({name:'wonjin'});
})
.catch(err => {
console.log('에러에러');
console.log(err);
})
.finally(() => {
console.log('끝');
});
여기를 따라한다.