세부사항들 뜯어보려고 이래저래 수정하는 도중에 MongoDB의 collection을 불러오지 못하는 에러가 발생했다.
에러내용은 즉슨 이렇다. collection을 찾을 수 없다
TypeError: Cannot read properties of undefined (reading 'collection')
해당 프로젝트에서 db에 접근할 때마다 db.collection('콜렉션DB명') 으로 불러왔었기에 MongoDB와 커넥트 부분에 db라는 변수로 할당해 놓은 부분이 문제였지 않았을까 싶었다.
const express = require('express');
const app = express();
const MongoClient = require('mongodb').MongoClient;
require('dotenv').config();
// DB connection - .env파일에 정보담겨있음
const id = process.env.DB_ID;
const pw = process.env.DB_PW;
const cluster = process.env.DB_CLUSTER;
const serverPort = process.env.SERVER_PORT;
const db_url = "mongodb+srv://" + id + ":" + pw + "@" + cluster + ".j22z1ok.mongodb.net/플젝명?retryWrites=true&w=majority"
MongoClient.connect(db_url, { useUnifiedTopology: true }, function (err, client) {
if(err) {
return console.log(err);
} else {
app.listen(server_port, ()=>{
global.db = client.db('플젝명');
console.log('<<<<< listening on server >>>>>')
});
}
});
db_url쪽엔 아무런 문제가 없었다. 오타도 없었고, 수정할 일도 없었고.
하단에 살펴보면 connect할 때 error가 뜰 경우 콘솔창에 에러를 출력했고, 정상적으로 연결이 되었다면 서버포트와 연결하는 부분을 적어놨다.
여길 자세히 보자니 global.db = client.db('');
db를 다른 곳에서도 사용하기 위해 global.db로는 설정했다지만 가장 기본으로 사용하는 db를 지정을 안해놨었다.
(사실 global만 적어놓으면 전역에서 다 되는줄...)
const express = require('express');
const app = express();
const MongoClient = require('mongodb').MongoClient;
require('dotenv').config();
// DB connection - .env파일에 정보담겨있음
const id = process.env.DB_ID;
const pw = process.env.DB_PW;
const cluster = process.env.DB_CLUSTER;
const serverPort = process.env.SERVER_PORT;
const db_url = "mongodb+srv://" + id + ":" + pw + "@" + cluster + ".j22z1ok.mongodb.net/플젝명?retryWrites=true&w=majority"
MongoClient.connect(db_url, { useUnifiedTopology: true }, function (err, client) {
if(err) {
return console.log(err);
} else {
app.listen(server_port, ()=>{
⭐️db = client.db('플젝명');⭐️
global.db = client.db('플젝명');
console.log('<<<<< listening on server >>>>>')
});
}
});