Mini-Node-Server (Refactor Express)

유슬기·2023년 2월 8일
0

프론트엔드

목록 보기
41/64
post-thumbnail

지난 번에 node로 만들었던 서버를 express로 리팩토링 하기

노드로 서버를 만들었을 때 보다 라우팅이 훨씬 간편해졌다.
express.json이나 res.json()를 사용하면 JSON 변환도 간편하다.
app.use()에 전달한 인자는 모든 경우에 적용되기 때문에 CORS 설정이나 express.json 설정을 모든 경우에 적용시키기 편했다.

const express = require('express') // express 모듈 불러오기
const cors = require('cors') // cors 미들웨어 불러오기

const app = express() // 서버 만들기
const PORT = 4999

// 서버 PORT 연결
app.listen(PORT, () => {
  console.log(`Example app listening on port ${PORT}`)
})
const jsonParser = express.json({strict: false}); 
// express.json([options]) https://expressjs.com/ko/4x/api.html#express.json
// strict: 배열 및 개체 수락만 활성화 또는 비활성화합니다. 
// 비활성화되면 JSON.parse가 허용하는 모든 것을 허용합니다.

app.use(jsonParser) // 모든 요청의 바디를 파싱해서 받아옴

// cors 설정, 모든 요청과 응답에 cors 헤더를 붙임
app.use(cors({
  origin: 'http://localhost:61381',
  methods: 'GET, POST, PUT, DELETE, OPTIONS',
  allowedHeaders: "Content-Type, Accept",
  maxAge: 10,
  // (기본 값) optionsSuccessStatus: 204 
}));

// GET 요청
app.get('/', (req, res) => {
  res.status(200).send('Hello World!')
})

// POST 요청 (엔드포인트 /upper)
app.post('/upper', (req, res) => {
  // res.json()을 사용하면 알아서 JSON 형태로 변환해서 응답해준다. 아래 코드와 같음
  // res.status(201).send(JSON.stringify(req.body.toUpperCase()));
  res.status(201).json(req.body.toUpperCase())
})
// POST 요청 (엔드포인트 /lower)
app.post('/lower', (req, res) => {
  res.status(201).json(req.body.toLowerCase())
})

오류처리는 어떻게 이루어지는지 정도만 이해를 했다.
아직 어떨 때 오류 처리를 해 줘야 하는지 파악을 못해 강제로 오류를 일으켜보는 식으로 오류 핸들러에 접근했다.

// 에러 강제로 일으키기..
// localhost:4999/error 에 접근하는 경우 next()에 인자를 넣어 에러 처리 미들웨어로 매칭
app.get('/error', (req, res, next) => {
  next(err);
})

/* 오류 처리 */
// 미들웨어는 위에서부터 순차적으로 실행되기 때문에, 해당 미들웨어를 만났다는 것은 
// 이전 미들웨어들에 대응하는 요청을 처리하지 못했다는 것을 뜻함 => 오류처리는 마지막에 선언해주기
// 404 Not Found 에러
app.use((req, res, next) => {
  res.status(404).send("404 | Not found!")
})

// 에러 처리 미들웨어 (error handler)는 다른 미들웨어와 다르게 인자를 4개 가져야 한다.
app.use((err, req, res, next) => {
  console.error(err);
  res.status(500).send("500 | Something Broke");
})
profile
아무것도 모르는 코린이

0개의 댓글