[솔로프로젝트] 아고라스테이츠 서버 구현하기

현채은·2023년 4월 9일
0

처음 진행한 솔로 프로젝트..
Mini node server 구현할 때 부터 어려웠지만,,
수업 끝나고 다시한번 한줄한줄 작성해보니 이해가 어느정도 된 것 같다..
근데 서버랑 클라이언트 연결은 아직 너무 어려운 것 같다 .. 😢
리엑트 리팩토링 공부하고 꼭 연결해봐야지 !!!!!!!!!

하기 전 복습해두기 😎

💡 app.js


const express = require('express');
const app = express();
//cors 모듈 불러오기
const cors = require('cors');
// morgan 미들웨어 불러오기
// morgan : 요청과 응답에 대한 정보를 콘솔에 기록
const morgan = require('morgan');


// HTTP 요청 logger를 편리하게 사용할 수 있는 미들웨어
app.use(morgan('tiny'));

// cors를 적용
app.use(cors());

// Express 내장 미들웨어인 express.json()을 적용
app.use(express.json());

const port = 4000; // 포트번호 4000사용
const discussionsRouter = require('./router/discussions');

// TODO: app.use()를 활용하여 /discussions 경로로 라우팅합니다. 
app.use('/discussions', discussionsRouter)

// 서버 상태 확인을 위해 상태코드 200과 함께 응답을 보냄
app.get('/', (req,res) => {
  return res.status(200).send('fe-sprint-my-agora-states-server');
});

const server = app.listen(port,() => {
  console.log(`[RUN] My Agora States Server... | http://localhost:${port}`);
});

module.exports.app = app;
module.exports.server = server;

💡 router/discussions.js


  • discussions 라우터 작성
const { discussionsController } = require('../controller'); // index.js 파일( 컨트롤러 )
//index.js 파일의 discussionsController 가져오기
const { findAll, findById, create, update } = discussionsController;
const express = require('express');
const router = express.Router();

// TODO: 모든 discussions 목록을 조회하는 라우터를 작성
router.get( '/', findAll );

//TODO: id에 맞는 discussions을 조회하는 라우터를 작성
router.get( '/:id', findById );

//TODO: 새로운 discussions을 추가하는 라우터를 작성
router.post( '/', create );

// TODO: id에 맞는 discussions을 수정하는 라우터를 작성
router.put( '/:id', update );

module.exports = router;

💡 index.js


  • 서버를 동작시킬 함수 작성
// ../repository/discussions에서 데이터 받아오기
const { agoraStatesDiscussions } = require("../repository/discussions")
const discussionsData = agoraStatesDiscussions;

const discussionsController = {
  // 모든 discussions 목록을 응답
  findAll: (req, res) => {
    return res.status(200).json(agoraStatesDiscussions)
  },
  // id를 입력하면 입력한 id의 discussions를 보여줌
  findById : (req, res) => {
    const {id} = req.params;
    // 요청된 id를 number 형태로 변환해서 가져와야 함
    const list = discussionsData.find((el) => el.id === Number(id));
    if(list) {
      return res.status(200).json(list);
    }
    else {
      return res.status(404).json('Not Found!')
    }
  },
  // 새로운 discussion을 추가
  create: (req, res) => {
    const id = uuid();
    discussionsData.push(req.body);
    console.log(req.body);
    
    return res.status(200).json(discossionsData);
  },
   // 해당 아이디의 데이터를 수정합니다
  update : (req,res) => {
    const { id } = req.params;
    if(id){
      let filtered = discussionsData.filter((el)=> id === el.id)
      let obj = Objsct.assign(filtered[0],req.body);
      console.log(obj);
      return res.status(200).json(obj);
    }
  }
};

module.exposts = { 
  discussionController,
};
  • module.exports
  • Array.prototype.find() : 주어진 판별 함수를 만족하는 첫 번째 요소의 값을 반환
    ➡️ 그런 요소가 없다면 undefined를 반환
profile
프론트엔드 개발자

0개의 댓글