작성
·
83
0
연결이 안되네요. 오류 메세지를 올릴게요.
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.
at NativeConnection.createClient (D:\inflearn\boiler-plate\node_modules\mongoose\lib\drivers\node-mongodb-native\connection.js:225:11)
at NativeConnection.openUri (D:\inflearn\boiler-plate\node_modules\mongoose\lib\connection.js:835:34)
at connect (D:\inflearn\boiler-plate\node_modules\mongoose\lib\mongoose.js:447:15)
at file:///D:/inflearn/boiler-plate/index.js:19:1
at ModuleJob.run (node:internal/modules/esm/module_job:268:25)
at async onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:543:26)
at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:116:5)Example app listening on port 5000
node:internal/modules/esm/resolve:257
throw new ERR_MODULE_NOT_FOUND(
^
Error [ERR_MODULE_NOT_FOUND]: Cannot find module 'D:\inflearn\boiler-plate\config\dev' imported from D:\inflearn\boiler-plate\config\key.js
at finalizeResolution (node:internal/modules/esm/resolve:257:11)
at moduleResolve (node:internal/modules/esm/resolve:913:10)
at defaultResolve (node:internal/modules/esm/resolve:1037:11)
at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:650:12)
at #cachedDefaultResolve (node:internal/modules/esm/loader:599:25)
at ModuleLoader.resolve (node:internal/modules/esm/loader:582:38)
at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:241:38) at onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:542:36)
at TracingChannel.tracePromise (node:diagnostics_channel:337:14)
at ModuleLoader.import (node:internal/modules/esm/loader:541:21) {
code: 'ERR_MODULE_NOT_FOUND',
url: 'file:///D:/inflearn/boiler-plate/config/dev'
}
Node.js v22.11.0
at moduleResolve (node:internal/modules/esm/resolve:913:10)
at defaultResolve (node:internal/modules/esm/resolve:1037:11)
at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:650:12)
at #cachedDefaultResolve (node:internal/modules/esm/loader:599:25)
at ModuleLoader.resolve (node:internal/modules/esm/loader:582:38)
at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:241:38) at onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:542:36)
at TracingChannel.tracePromise (node:diagnostics_channel:337:14)
at ModuleLoader.import (node:internal/modules/esm/loader:541:21) {
code: 'ERR_MODULE_NOT_FOUND',
url: 'file:///D:/inflearn/boiler-plate/config/dev'
}
Node.js v22.11.0
code: 'ERR_MODULE_NOT_FOUND',
url: 'file:///D:/inflearn/boiler-plate/config/dev'
}
답변 1
0
말 그대로 mongoDB의 url 주소를 담고 있는 변수가 undefined 타입이라는 소리 입니다. 기존 저희가 비밀 정보 보호 조치를 하기 전에는 string 형의 url 주소를 변수에 직접 담아서 사용했는데, 이를 dev.js, key.js, prod.js로 분리하는 과정을 통해 변수를 index.js에서 받아오는 과정에서 해당 키에 대응하는 값(mongoURI에 대응하는 value값)을 찾을 수 없기 때문일 겁니다. 저도 이거 때문에 console.log를 찍어보면서 찾아봤는데, 우선 .env 파일에 NODE_ENV=development라는 변수를 설정해서 key.js에서 process.env.NODE_ENV === production일 경우에 false가 되도록 해서 require('./dev')가 되도록 했네요. 이후, index.js에서 config 모듈을 불러오고, 해당 config 모듈에 저장된 key - value값을 통해 가져왔습니다.
한 단계 씩 console.log를 통해 디버깅 하면서 천천히 찾아보시면 해결 될 거에요!
다시 해보니까, .env 파일에 따로 NODE_ENV 변수를 만들 필요는 없네요. 애플리케이션에서 자체적으로 NODE_ENV라는 게 있는 것 같아요. 이게 현재 개발 상태(배포, 개발 및 테스트)에 따라 자동으로 해당 변수의 값을 변경시키는 것 같습니다..(자세히는 모르겠지만)