지난 번에 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");
})