Boot Camp/code states

[ Code States ] Refactor Express 과제

2023. 4. 6. 16:17
목차
  1. 요구 사항 / 기본 세팅
  2.  
  3. 과제를 통해 알게 된 지식 / 각각의 역할
Refactor Express 과제

1. Mini Node Server에서 HTTP 모듈로 작성했던 서버를, 프레임워크 Express를 이용하는 방식으로 리팩토링한다.


요구 사항 / 기본 세팅

1. Express 설치

npm install express

2. 간단한 웹 서버 만들기 / 참고 해서 코드 작성하기

const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => {
  res.send('Hello World!')
})

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})

3. 라우팅: 메서드와 url에 따라 분기(Routing)하기

 

 

Mini Node Server에서 HTTP 모듈로 작성했던 서버 코드

const http = require('http');

const PORT = 4999;

const ip = 'localhost';

const server = http.createServer((request, response) => {
  // preflight request 처리 -> 메소드가 option 일때, cors 설정을 돌려줘야 한다.
  // 메소드가 post고, url이 /upper면 대문자로 응답을 돌려줘야 한다
  // 메소드가 post고, url이 /lower면 소문자로 응답을 돌려줘야 한다
  // 나머지는 다 에러로 처리한다. bad request

  const { method, url } = request;

  let body = [];
  request
    .on('data', (chunk) => {
      body.push(chunk);
    })
    .on('end', () => {
      body = Buffer.concat(body).toString();

      if (request.method === 'POST' && request.url === '/upper') {
        response.writeHead(200, defaultCorsHeader);
        response.end(body.toUpperCase());
      } else if (request.method === 'POST' && request.url === '/lower') {
        response.writeHead(200, defaultCorsHeader);
        response.end(body.toLowerCase());
      } else if (request.method === 'OPTIONS') {
        response.writeHead(200, defaultCorsHeader);
        response.end();
      } else {
        response.writeHead(404, defaultCorsHeader);
        response.end('잘못된 요청');
      }
    });
});

server.listen(PORT, ip, () => {
  console.log(`http server listen on ${ip}:${PORT}`);
});

const defaultCorsHeader = {
  // 모든 Origin에서 오는 요청을 허용
  'Access-Control-Allow-Origin': '*',
  // 모든 HTTP 메서드 허용
  'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
  // 요청을 허용하는 헤더
  'Access-Control-Allow-Headers': 'Content-Type, Accept',
  // 클라이언트에서 preflight 의 요청 결과를 저장할 기간을 지정
  'Access-Control-Max-Age': 10,
};

결론은 http모듈로 작성했던 위 코드를 Express 모듈을 이용한 코드로 리팩토링하라는 과제이다.


 

Express와 CORS 미들웨어를 사용하여 HTTP 서버를 작성한 코드

const express = require('express');
const cors = require('cors');

const app = express(); //express 사용

app.use(cors()); // 모든 요청/응답에 CORS 처리
app.use(express.json({ strict: false })); // 자동 바디 파싱

const PORT = 4999;
const ip = 'localhost';

app.post('/upper', function (req, res) {
  let result = req.body;
  result = result.toUpperCase();
  res.json(result); // 다시 데이터를 보내줄 때 json화 해서 보내주는 메소드
});

app.post('/lower', function (req, res) {
  let result = req.body;
  result = result.toLowerCase();
  res.json(result);
});

app.use(function (req, res, next) {
  // 400에러 즉, 클라이언트의 잘못으로 인한 에러는 인자에 err를 넣지 않는다.
  res.status(404).send('Something broke! 404');
});

app.use(function (err, req, res, next) {
  //에러 처리
  console.error(err.stack);
  res.status(500).send('Something broke! 500');
});

app.listen(PORT, ip, () => {
  console.log(`http server listen on ${ip}:${PORT}`);
});

 

과제를 통해 알게 된 지식 / 각각의 역할

 

1. const app = express()

- Express 앱을 생성

 

2. app.use(cors())

- CORS 미들웨어를 사용하여 모든 요청과 응답에 대해 CORS 처리를 설정한다.

- CORS는 Cross-Origin Resource Sharing의 약자로, 다른 도메인으로부터의 HTTP 요청을 허용하도록 설정하는 것이다.

 

3. app.use(express.json({ strict: false }))

- JSON 형식의 요청 바디를 자동으로 파싱하도록 설정한다.

- strict: false 옵션은 엄격한 JSON 파싱을 해제하는 옵션으로, 좀 더 유연한 JSON 파싱을 수행

 

4. app.post('/upper', function (req, res) { ... }); 및 app.post('/lower', function (req, res) { ... })

- '/upper'와 '/lower'라는 두 개의 엔드포인트에 대해 POST 요청을 처리하는 라우팅 핸들러를 설정한다.

- 각 요청은 클라이언트로부터 받은 데이터를 대문자 또는 소문자로 변환하고, JSON 형태로 응답한다.

 

5. app.use(function (req, res, next) { ... })

- 404 에러 처리를 위한 미들웨어 함수를 설정한다.

- 해당 함수는 모든 요청에 대해 실행되며, 요청이 처리되지 않은 경우(404 에러)에 실행된다.

 

6. app.use(function (err, req, res, next) { ... })

- 500 에러 처리를 위한 미들웨어 함수를 설정, 해당 함수는 에러가 발생한 경우에 실행됨

- 에러를 콘솔에 출력하고, "Something broke! 500"라는 메시지와 함께 500 상태코드를 응답한다.

 

7. app.listen(PORT, ip, () => { ... })

- 서버를 시작하고, 지정한 포트번호와 IP 주소로 서버가 연결되었음을 콘솔에 출력한다.

 

 

'Boot Camp > code states' 카테고리의 다른 글

[ Code States ] Section 2 / 기술 면접 준비  (0) 2023.04.10
[ Code States ] StatesAirline Server 과제  (0) 2023.04.07
[ Code States ] Mini Node Server 과제  (0) 2023.04.06
코드스테이츠 OT - [ 메타인지적 학습법 / 앞으로의 나의 다짐 ]  (0) 2023.03.23
[ Code States ] Section 1 / KDT 회고  (0) 2023.03.22
  1. 요구 사항 / 기본 세팅
  2.  
  3. 과제를 통해 알게 된 지식 / 각각의 역할
'Boot Camp/code states' 카테고리의 다른 글
  • [ Code States ] Section 2 / 기술 면접 준비
  • [ Code States ] StatesAirline Server 과제
  • [ Code States ] Mini Node Server 과제
  • 코드스테이츠 OT - [ 메타인지적 학습법 / 앞으로의 나의 다짐 ]
_moda
_moda
프론트엔드 개발 공부를 하고 있읍니다.
_moda
ModaLog
_moda
전체
오늘
어제
  • All Records
    • 취업 준비
    • TIL
    • Front end
      • HTML \ CSS
      • JavaScript
      • TypeScript
      • React
      • GIT
      • Node.js
      • 개발 지식
      • 면접 질문 공부
    • Boot Camp
      • code states
      • Project
    • 자료구조 \ 알고리즘 기법
    • Coplit
    • Programmers
    • 모다딥 공부 정리

블로그 메뉴

  • 태그
  • 방명록

공지사항

  • 개발자로 가는 길

인기 글

태그

  • 네트워크 기초
  • react
  • 타입스크립트
  • CODE STATES
  • javascript
  • typescript
  • 모던 자바스크립트 딥 다이브
  • til
  • Coplit
  • 코드스테이츠

최근 댓글

최근 글

hELLO · Designed By 정상우.
_moda
[ Code States ] Refactor Express 과제
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.