Study/MongoDB
MongooseError: The `uri` parameter to `openUri()` must be a string, got "undefined". Make sure the first parameter to `mongoose.connect()` or `mongoose.createConnection()` is a string.
Potato potage
2023. 4. 28. 23:36
반응형
클론 프로젝트 진행하는데 이 오류가 안사라져서 3시간 내내 수정했다...
안되면 질문해야지 했는데 끄적이니까 바로 됐다... 피곤해요...
먼저 index.js와 .env 파일을 가지고 삽질 했다.
1. dotenv 설치 >> 당연히 처음 시작할때 install 하고 시작
2. dotenv import 방식 수정 >> 안됨!
// 원래 코드
const dotenv = require('dotenv');
dotenv.config();
// 수정1
require('dotenv').config();
// 수정2 (index.js와 .env 파일이 같은 위치)
const dotenv = require('dotenv');
dotenv.config({ path: '.env' });
3. useNewUrlParser 등 추가 >> 안됨!!!!!
// 수정1
mongoose.connect(config.DB,{ useNewUrlParser: true }));
// 수정2
mongoose
.connect(DB, {
usenewurlparser: true,
useunifiedtopology: true,
})
.then(() => {
console.log("Successfully connected ");
})
.catch((error) => {
console.log(`can not connect to database, ${error}`);
});
4. uri 받아오는 법 수정 >> 여기서 이상함을 느낌
const db = process.env.MONGO || 'test'
mongoose.connect(db, {
useNewUrlParser: true,
useUnifiedTopology:true,
useCreateIndex: true
}).then(()=>{
console.log("conected to mongodb");
}).catch(error => {
console.log("mongo error",error);
})
.env에서 uri 값 자체가 안넘어 왔다.
console.log를 찍어보면 계속 'test'가 찍혔다.
해당 글에서 어떤 사람은 dotenv가 계속 값이 안넘어 와서 그냥 값을 그대로 썼다고 하던데 죽어도 그렇게 쓰기는 싫었다.(ㅠㅠ db 아이디랑 비밀번호가 다 털리게 되는건데..)
그래서 다시 스택 오버플로우를 뒤지다가
이런 답변을 봤다.
그대로 따라했더니
console.log(require('dotenv').config())
이렇게 오류가 떠서 설마 절대 경로 위치가 틀렸다 했더니 정답이었다..........
그래서 결론적으로 수정 코드는 아래와 같다!!!!
// index.js는 server/src 폴더 안에, .env는 server 폴더 안에 있다.
require('dotenv').config({ path: '../.env' });
남들은 .config()만 해도 잘 찾아오던데 나는 경로를 써줬어야 찾아오는거였다.
.env 파일을 index.js와 같은 위치에 놓았을때도 값을 못찾아왔는데......
절대 경로를 제대로 못 써서 3시간 삽질한거 같다.
분명히 잘 기억하고 있다 했는데 부끄럽다 (,,ᴗ ᴗ,,) ⁾⁾
반응형