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

치카치카님의 프로필 이미지

작성한 질문수

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

[ODM-MongoDB접속] post요청 후 몽고DB에서 조회가 안됩니다.

해결된 질문

23.03.19 18:58 작성

·

717

0

postman에서 post요청 후 get으로 확인했을 때 잘 받아와집니다.

 

MongoDB Compass에 localhost:27017로 연결해서 refresh해도 mydocker DB가 조회가 안됩니다.

 

docker - mongodb가 연결이 잘 안된건지 어렵습니다.. 어떻게 확인할 수 있을까요?

import express from 'express'
import { checkValidationPhone, getToken, sendTokenToSMS } from './phone.js';
import swaggerUi from 'swagger-ui-express'
import swaggerJSDoc from 'swagger-jsdoc'
import { options } from './swagger/config.js'
import cors from 'cors'
import { checkValidationEmail, getWelcomeTemplate, sendWelcomeTemplateToEmail } from './email.js';
import mongoose from 'mongoose'
import { Board } from './models/board.model.js'

const app = express()
app.use(cors())
app.use(express.json());
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerJSDoc(options)));

app.get('/boards', async (req, res) => {
  // const result = [
  //   {
  //     number: 1,
  //     writer: '철수',
  //     title: '제목입니다~~~',
  //     contents: '내용이에요@@@',
  //   },
  //   {
  //     number: 2,
  //     writer: '영희',
  //     title: '영희 제목입니다~~~',
  //     contents: '영희 내용이에요@@@',
  //   },
  //   {
  //     number: 3,
  //     writer: '훈이',
  //     title: '훈이 제목입니다~~~',
  //     contents: '훈이 내용이에요@@@'
  //   },
  // ];
  const result = await Board.find() //DB접속해서 가져오는 내용 위랑동일

  res.send(result)
})

app.post('/boards', async (req, res) => {
  console.log(req.body);

  // 1. 데이터를 등록하는 로직 => DB에 접속해서 데이터 저장하기
  const board = new Board({
    writer: req.body.writer,
    title: req.body.title,
    contents: req.body.contents,
  });
  await board.save(); //원래는 SQL문법을 써야하지만 mongoose가 자동으로 변환해줌.(ORM, ODM)

  // 2. 저장 결과 응답 주기
  res.send("게시물 등록에 성공하였습니다.");
});

app.post('/tokens/phone', (req, res) => {
  const myphone = req.body.myphone;

  const isValid = checkValidationPhone(myphone);
  if (isValid) {
    const mytoken = getToken();
    sendTokenToSMS(myphone, mytoken);
    res.send('인증완료!!!');
  }
});

app.post("/users", (req, res) => {
  const user = req.body.myuser

  const isValid = checkValidationEmail(user.email)
  if(isValid){
    const mytemplate = getWelcomeTemplate(user)

    sendWelcomeTemplateToEmail(user.email, mytemplate)
    res.send("가입완료!")
  }
})

//몽고DB 접속
mongoose.connect("mongodb://my-database:27017/mydocker")
// localhost로 접속하게되면 express 도커안에서의 localhost이기때문에 dockercompose로 묶인 my-database-1 컴퓨터로 들어가야함.
// 단, dockercompose로 묶어뒀기 때문에 이름만 입력해서 진입가능(네임리졸루션).

// Backend API 서버 오픈
app.listen(3000, () => console.log(`exemple app listening on port ${3000}`))

답변 1

0

otter님의 프로필 이미지

2023. 03. 20. 13:40

안녕하세요 치카치카님!

업로드 해주신 질문의 내용을 확인해 보았을 때, 가장 먼저 의심되는 부분은 local 즉, 치카치카님 pc 자체에 설치된 MongoDB와 Docker 내부에서 띄워진 MongoDB의 포트 번호 충돌입니다.

따라서 27017 포트를 사용하는 local의 MongoDB가 정상적으로 종료된 상태인지 확인해 보시길 바랍니다!