인프런 커뮤니티 질문&답변

wiyuchan1021님의 프로필 이미지

작성한 질문수

코로나맵 개발자와 함께하는 지도서비스 만들기 2

mongoose 패키지 설치 및 설정

mongoDB 관련 질문

24.10.10 12:01 작성

·

25

0

 

#!/usr/bin/env node

/**
 * Module dependencies.
 */

var app = require('../app');
var debug = require('debug')('suzil:server');
var http = require('http');
const mongoose = require("mongoose");
const userConfig = require("../config/userConfig.json");

let db = mongoose.connection;
db.on("error",console.error);
db.once("open",()=>{
  console.log("Connected to mongo Server");  
});

mongoose.connect(
  `mongodb+srv://wiyuchan1021:${userConfig.PW}>@suzilo.i1je5.mongodb.net/suzilo?retryWrites=true&w=majority`,
  {useNewUrlParser: true, useUnifiedTopology: true}
)

/**
 * Get port from environment and store in Express.
 */

var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

/**f
 * Create HTTP server.
 */

var server = http.createServer(app);

/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

/**
 * Normalize a port into a number, string, or false.
 */

function normalizePort(val) {
  var port = parseInt(val, 10);

  if (isNaN(port)) {
    // named pipe
    return val;
  }

  if (port >= 0) {
    // port number
    return port;
  }

  return false;
}

/**
 * Event listener for HTTP server "error" event.
 */

function onError(error) {
  if (error.syscall !== 'listen') {
    throw error;
  }

  var bind = typeof port === 'string'
    ? 'Pipe ' + port
    : 'Port ' + port;

  // handle specific listen errors with friendly messages
  switch (error.code) {
    case 'EACCES':
      console.error(bind + ' requires elevated privileges');
      process.exit(1);
      break;
    case 'EADDRINUSE':
      console.error(bind + ' is already in use');
      process.exit(1);
      break;
    default:
      throw error;
  }
}

/**
 * Event listener for HTTP server "listening" event.
 */

function onListening() {
  var addr = server.address();
  var bind = typeof addr === 'string'
    ? 'pipe ' + addr
    : 'port ' + addr.port;
  debug('Listening on ' + bind);
}

코드 실행하면
PS C:\Users\yuchan\suzil> npm start

> suzil@0.0.0 start

> nodemon ./bin/www

[nodemon] 3.1.7

[nodemon] to restart at any time, enter rs

[nodemon] watching path(s): .

[nodemon] watching extensions: js,mjs,cjs,json

[nodemon] starting node ./bin/www

(node:13580) [MONGODB DRIVER] Warning: useNewUrlParser is a deprecated option: useNewUrlParser has no effect since Node.js Driver version 4.0.0 and will be removed in the next major version

(Use node --trace-warnings ... to show where the warning was created)

(node:13580) [MONGODB DRIVER] Warning: useUnifiedTopology is a deprecated option: useUnifiedTopology has no effect since Node.js Driver version 4.0.0 and will be removed in the next major version

MongoServerError: bad auth : authentication failed

at Connection.sendCommand (C:\Users\yuchan\node_modules\mongodb\lib\cmap\connection.js:289:27)

at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

at async Connection.command (C:\Users\yuchan\node_modules\mongodb\lib\cmap\connection.js:312:26)

at async continueScramConversation (C:\Users\yuchan\node_modules\mongodb\lib\cmap\auth\scram.js:131:15)

at async executeScram (C:\Users\yuchan\node_modules\mongodb\lib\cmap\auth\scram.js:80:5)

at async ScramSHA1.auth (C:\Users\yuchan\node_modules\mongodb\lib\cmap\auth\scram.js:39:16)

at async performInitialHandshake (C:\Users\yuchan\node_modules\mongodb\lib\cmap\connect.js:104:13)

at async connect (C:\Users\yuchan\node_modules\mongodb\lib\cmap\connect.js:24:9) {

errorResponse: {

ok: 0,

errmsg: 'bad auth : authentication failed',

code: 8000,

codeName: 'AtlasError'

},

ok: 0,

code: 8000,

codeName: 'AtlasError',

connectionGeneration: 0,

[Symbol(errorLabels)]: Set(2) { 'HandshakeError', 'ResetPool' }

}

node:internal/process/promises:391

triggerUncaughtException(err, true /* fromPromise */);

^

MongoServerError: bad auth : authentication failed

at Connection.sendCommand (C:\Users\yuchan\node_modules\mongodb\lib\cmap\connection.js:289:27)

at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

at async Connection.command (C:\Users\yuchan\node_modules\mongodb\lib\cmap\connection.js:312:26)

at async continueScramConversation (C:\Users\yuchan\node_modules\mongodb\lib\cmap\auth\scram.js:131:15)

at async executeScram (C:\Users\yuchan\node_modules\mongodb\lib\cmap\auth\scram.js:80:5)

at async ScramSHA1.auth (C:\Users\yuchan\node_modules\mongodb\lib\cmap\auth\scram.js:39:16)

at async performInitialHandshake (C:\Users\yuchan\node_modules\mongodb\lib\cmap\connect.js:104:13)

at async connect (C:\Users\yuchan\node_modules\mongodb\lib\cmap\connect.js:24:9) {

errorResponse: {

ok: 0,

errmsg: 'bad auth : authentication failed',

code: 8000,

codeName: 'AtlasError'

},

ok: 0,

code: 8000,

codeName: 'AtlasError',

connectionGeneration: 0,

[Symbol(errorLabels)]: Set(2) { 'HandshakeError', 'ResetPool' }

}

Node.js v20.17.0

[nodemon] app crashed - waiting for file changes before starting...

이러한 오류가 터미널에 뜨는데 왜 그런걸까요?

답변 1

0

인프런 AI 인턴님의 프로필 이미지

2024. 10. 10. 12:06

안녕하세요, 인프런 AI 인턴입니다.

wiyuchan1021님이 겪고 계신 문제는 MongoDB Atlas와의 인증 관련 오류로 보입니다. 이 문제를 해결하기 위해 몇 가지 확인해야 할 사항을 안내해 드리겠습니다.

1. MongoDB Atlas 사용자 인증 정보 확인:

먼저 userConfig.PW에 담긴 비밀번호가 올바른지 확인해 주세요. 만약에 비밀번호가 변경되었다면, 새로운 비밀번호로 업데이트해 주셔야 합니다.

2. URL의 올바름 확인:

  • MongoDB 연결 URL에서 사용자 이름과 비밀번호가 정확하게 입력되었는지 확인합니다. 특히 특수 문자가 포함된 경우 URL 인코딩이 필요할 수도 있습니다.
  • 예를 들어, @ 같은 특수 문자는 %40과 같이 URL 인코딩이 필수입니다.

3. 네트워크 접근 설정 확인:

  • MongoDB Atlas의 네트워크 접근 설정에서 본인의 IP 주소가 화이트리스트에 추가되어 있는지 확인해 주세요. 이것이 설정되지 않은 경우 접근이 거부될 수 있습니다.

4. 권한 설정 확인:

  • 해당 데이터베이스에 접근 할 수 있도록 사용자가 적절한 권한을 가지고 있는지 확인합니다. MongoDB Atlas에서 사용자 관리 콘솔을 통해 사용자 권한을 체크해 주세요.

5. 옵션 제거:

  • 오류 메시지에서 useNewUrlParseruseUnifiedTopology 옵션은 더 이상 필요하지 않다고 언급하고 있습니다. 따라서 제거해도 문제가 없습니다.

위의 내용을 참고하셔서 다시 시도해 보시기 바랍니다.

추가적으로 관련된 기존답변을 참고하실 수 있는 게시글을 추천드립니다:
- “Mong Server 연결시 경고창이 뜹니다.” - 사용자 인증 및 연결과 관련한 문제 해결 방법이 유사할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.