728x90
반응형
SMALL
Do it! Node.js 프로그래밍 입문 공부단 6일차 입니다.
미들웨어란
요청과 응답의 중간에 있으면서 요청을 처리하거나 원하는 상태로 응답을 수정하는 함수를 미들웨어라고 합니다.
파싱
요청 안에 포함된 아이디와 비밀번호의 값을 애플리케이션에서 읽을 수 있는 형태로 변환하는 것을 파싱이라고 합니다.
미들웨어의 역할
속성 | 설명 |
요청 전처리 | 요청이 서버에 도착하기 전에 실행하는 작업을 담당합니다. |
라우팅 처리 | 라우트 코드를 좀 더 읽기 쉽고 관리하기 쉽도록 모듈화하는 라우터 미들웨어가 있습니다. |
응답처리 | 서버에서 클라이언트로 응답을 보낼 때 자료를 적절한 형태로 변환하거나 오류를 처리하는 작업을 합니다. |
애플리케이션 레벨 미들웨어
애플리케이션 단계에서 사용하는 미들웨어를 말합니다.
const express = require("express")
const app = express() // app 객체가 애플리케이션
// 애플리케이션 자체에 get이나 post함수를 사용해서
// 미들웨어를 처리하면 애플리케이션 레벨 미들웨어라고 합니다.
app.get()
app.post()
app.get("/contacts", (req, res) => {...})
app.get("/contacts/:id", (req, res) => {...})
// (req, res) => {...} 이 부분이 미들웨어에 해당
라우터 미들웨어
익스프레스는 라우터 객체를 통해 라우트 코드를 정리할 수 있습니다. 라우트 객체를 사용한 것을 라우터 미들웨어라고 하고, 라우터 미들웨어는 요청이 오면 응답할 때까지의 중간 처리를 맡은 함수라고 생각하면 됩니다.
- router 인스턴스 객체 만들기
const router = express.Router()
app.use([경로], 미들웨어)
경로를 지정하면 해당 경로에서 미들웨어를 사용한다는 의미입니다.
경로를 지정하지 않으면 애플리케이션 전체에서 해당 미들웨어를 사용한다는 의미입니다.
router.METHOD()
METHOD는 get, post, put 등입니다.
코드 작성
const express = require("express")
const app = express()
const router = express.Router()
const port = 3000
app.get("/", (req, res) => {
res.status(200).send("Hello Node - 07")
})
router
.route("/contacts")
.get((req, res) => {
res.status(200).send("Contacts Page")
})
.post((req, res) => {
res.status(201).send("Create Contacts")
})
router
.route("/contacts/:id")
.get((req, res) => {
res.status(200).send(`View Contact for ID: ${req.params.id}`)
})
.put((req, res) => {
res.status(200).send(`Update Contact for ID: ${req.params.id}`)
})
.delete((req, res) => {
res.status(200).send(`Delete Contact for ID: ${req.params.id}`)
})
app.use(router)
app.listen(port, () => {
console.log(`${port} - start server`)
})
라우트 코드를 외부 파일로 관리
routes/contactRoutes.js
const express = require("express")
const router = express.Router() // router 객체 인스턴스 생성
router
.route("/")
.get((req, res) => {
res.status(200).send("Contacts Page")
})
.post((req, res) => {
res.status(201).send("Create Contacts")
})
router
.route("/:id")
.get((req, res) => {
res.status(200).send(`View Contact for ID: ${req.params.id}`)
})
.put((req, res) => {
res.status(200).send(`Update Contact for ID: ${req.params.id}`)
})
.delete((req, res) => {
res.status(200).send(`Delete Contact for ID: ${req.params.id}`)
})
module.exports = router
app.js
const express = require("express")
const app = express()
const port = 3000
app.get("/", (req, res) => { // /로 요청했을 때
res.status(200).send("Hello Node - 07")
})
// router 등록
app.use("/contacts", require("./routes/contactRoutes")) // /contacts로 요청했을 때
app.listen(port, () => {
console.log(`${port} - start server`)
})
router.get()과 router.route().get()의 차이
router.get()은 지정한 경로를 통해 get 요청이 들어왔을 때 콜백함수를 실행합니다.
router.route().get()은 같은 경로를 사용하는 콜백함수가 여러 개일 때 route()에서 경로를 한 번만 지정하고 실행할 요청 방식을 나열할 수 있습니다.
하나의 경로에서 1가지 요청만 한다면 router.get() 방식처럼 사용해도 되고, 하나의 경로에서 여러 가지 요청을 처리해야 한다면 router.route().get() 방식을 사용해서 여러 콜백을 나열해서 사용하면 됩니다.
728x90
반응형
LIST
'Node.js' 카테고리의 다른 글
[Node.js] 노드제이에스 - 미들웨어를 사용해 오류처리 (0) | 2024.02.08 |
---|---|
[Node.js] 노드제이에스 - 바디파서 미들웨어 (0) | 2024.02.08 |
[Node.js] 노드제이에스 - 익스프레스의 요청 객체와 응답 객체 (0) | 2024.02.07 |
[Node.js] 노드제이에스 - 익스프레스에서 라우팅 (0) | 2024.02.07 |
[Node.js] 노드제이에스 - 익스프레스(Express) (0) | 2024.02.07 |
댓글