Assertion failed: You must provide either mongoUrl|clientPromise|client in options / Cannot init client. Please provide correct options'

iiingkeep·2024년 5월 26일

Errors

목록 보기
6/6

Assertion failed: You must provide either mongoUrl|clientPromise|client in options / Cannot init client. Please provide correct options'



상황

세션 데이터를 mongoDB에 저장하기 위한 세션 설정 중, secret과 store 속성 입력 시 코드가 노출되면 안 되기 때문에 .env에 해당 데이터를 환경변수로 설정한 뒤 코드를 환경 변수로 변경하니 위의 에러가 발생하였다.


.env에는 secret과 store속성값에 대한 환경변수를 다음과 같이 설정

COOKIE_SECRET=내가 설정한 값
DB_URL=내가 설정한 값

server.js에 설정한 세션 관련 속성

app.use(session({
  secret: process.env.COOKIE_SECRET,
  resave: false,
  saveUninitialized: false,
  cookie: {
    maxAge: 20000, // milisecond로 설정
  },
  store: MongoStore.create({mongoUrl: process.env.DB_URL}),
}));

mongoUrl을 환경변수로 입력해줬는데 mongoUrl이 제공되지 않았다는 에러가 떠 여러가지 시도를 통해 원인을 알아보았다. 다음의 공식문서에서 많이 참고했다.
https://www.npmjs.com/package/dotenv

  1. .env 설치 여부 확인
    package.json에 입력된 내용으로보아 설치가 잘 되었다.

  2. import가 잘 되었는지의 여부 확인
    .env 파일은 가장 처음으로 실행되는 파일의 최상단에 import 하는것을 권장하고 있다.

    "scripts": {
        "dev": "nodemon --exec babel-node src/init.js"
      },

    잘 모르겠다면 package.json을 확인. 처음으로 실행시키는 파일이 무엇인지 scripts 부분에 명시되어있다.
    init.js파일에 import를 잘 해준 것을 확인

    import ‘dotenv/config’
  1. .env에 환경변수 설정시 ''(작은 따옴표) 또는 ""(큰따옴표)를 입력했는지 확인
    .env에 환경변수를 설정할 때는 '' 또는 ""를 입력하지 않아야 한다.

  2. 오타 확인

  1. .env파일이 프로젝트의 최상위 루트 디렉터리에 위치하는지 확인

    나의 문제는 여기에 있었다. .env 파일이 다른 폴더 안에 있으면 안되고, 최상위 루트 디렉터리에 있어야 한다는 사실은 이미 알고 있었는데 나는 루트 디렉터리에 위치시켰다고 생각했지만 자세히 보니 src 폴더 안에 위치시켜놨었다.....
    그러니 환경변수가 다른 파일에 전달이 되지 않아 mongoUrl 값이 undefined로 나왔던 것.
    얼른 .env 파일의 위치를 위의 사진과 같이 루트 디렉터리로 위치시켰다.
    이미 제대로 위치시켜놨다고 생각하니 에러의 원인을 찾기위해 더 헤맸던 것 같다.
    아는 것도 다시 보자!

원인

.env파일을 프로젝트의 루트 디렉터리에 위치시키지 않았다.

해결

.env파일을 프로젝트의 루트 디렉터리에 위치시킨다.

profile
혁신적인 백엔드 개발자가 되고자, 기록✏️

0개의 댓글