노드js에서 미들웨어란
웹 애플리케이션에서 요청과 응답사이에 위치하여 클라이언트의 요청을 처리하고 필요한 작업을 수행하도록 도와준다.
클라이언트로부터 들어오는 HTTP요청과 서버로부터 클라이언트로 보내는 HTTP 응답에 영향을 주는 중간 소프트웨어 구성 요소로 req, res객체 그리고 라우터 함수 사이에 존재한다.
장점
코드의 모듈성과 재사용성을 높이며 코드를 보다 구조적으로 유지하고 유지보수를 용이하게 만들어준다.
사용방법
app.use() 또는 router.use()를 통해 등록하고 next()함수를 호출하여 다음 미들웨어로 제어를 넘길 수 있다.
index.js
const app = express();
app.use((req, res, next) => {
req.country = 'KR'
next()
})
app.use("/", require("./router/common.js"));
app.use("/qna/", require("./router/qna.js"));
이렇게하면 모든 라우터에서 req객체로 접근하여 country값을 구할 수 있다.
qna메뉴에서 country 값을 가져와보자.
qna.js
router.get('/', async function (req, res) {
//const country = req.country
const {country} = req
res.render('qna', {
country
});
});
qna.ejs
<meta name="country" content="<%- country %>">
참고
country를 가지고있는 미들웨어는 middleware.js로 따로 빼서 변수혹은 함수를 호출하여 쓸 수있다.
index.js
const middleware = require('./router/middleware')
app.use(middleware.contry)//미들웨어가 변수일경우
app.use(middleware.contry())//미들웨어가 함수일경우
[router]/middleware.js
const country = (req, res, next) => {
req.country = "KR"
next();
}
const countryFunc = function () {
return (req, res, next) => {
req.country = "KR"
next();
}
}
module.exports = {
country,
countryFunc
}
country말고 다른 데이터들이 많을경우 객체화도 가능하다.
const country = (req, res, next) => {
req.renderExtraData = req.renderExtraData ?? {}
//req.country = "KR"
req.renderExtraData.country = 'KR'
req.renderExtraData.weather = 'summer'
next();
}
module.exports = {
country,
}
router.get('/', async (req, res) => {
// const country = req.country
res.render('history', {
...req.renderExtraData,
// country
})
})
https://artdeveloper.tistory.com/3
반응형
'Backend > node.js' 카테고리의 다른 글
Node 초간단 업데이트 방법(MAC과 Window) (0) | 2023.12.17 |
---|---|
fetch 에러 SyntaxError: Unexpected end of JSON input (0) | 2023.07.06 |
Nodejs index.js 예시 (0) | 2023.07.05 |
[nodejs] Uncaught SyntaxError: Unexpected token '<' (0) | 2023.02.15 |
[nodejs] Fatal javascript OOM in GC during deserialization (0) | 2022.09.14 |