본문 바로가기

백엔드/nodeJS

express 서버구축하기 (2) - Middleware

middleware : request 요청에 응답하는 함수가 아니라 다음 함수에게 작업을 넘기는 함수로 사용된다. 모든 controller(handler)는 middleware가 될 수있다. controller의 argument는 3가지 req,res,next가 있다. middlewaresms next인자를 사용하여 다음 함수에게 작업을 넘긴다. res(응답)을 하면 next 함수는 적용되지 않는다.

 

middleware는 유저들이 웹사이트의 어디를 가려고 하는지 알려줄 수 있다. 유저가 로그인했는지 안했는지 확인할 수 있다.

(* req.url : request의 정보를 가지고있기 때문에 url정보도 불러올 수 있다.) 

middleware는 조건에 따라 res할 수 있고 다음 함수로 넘겨 줄수도 있다. 자주사용할 예정!

 

const privateMiddleware = (req, res, next) => {
const url = req.url;
if (url == "/privateMiddleware") {
res.send(`<h1>not allow`);
}
console.log(`you may continue`);
next();
};

 

middleware를 app.use에 사용해서 global하게 사용할 수 있다. (app전체에 어떤 url에서도 사용할 수 있음)

app.use를 사용하지 않으면 middleware을 사용할 때 마다 app.get("/주소", middleware, controller)을 사용해야한다.

 

import express from "express";

const PORT = 4000;
const app = express();

const logger = (req, res, next) => {
console.log(`someone is going to: ${req.url}`);
next();
};

const privateMiddleware = (req, res, next) => {
const url = req.url;
if (url == "/privateMiddleware") {
res.send(`<h1>not allow`);
}
console.log(`you may continue`);
next();
};

const handleHome = (req, res) => {
return res.send("I still love you");
};

const handlePrivate = (req, res) => {
return res.send("i am private page");
};

app.use(logger);
app.use(privateMiddleware);
app.get("/", handleHome);
app.get("/privateMiddleware", handlePrivate);

const handleListening = () =>
console.log(`✅ Server listening on http://localhost:${PORT} 🚀`);

app.listen(PORT, handleListening);

app.use(logger);
app.get("/", handlehome);
app.get("/private", handleprivate);

app.get("/", logger, handlehome);
app.get("/private", logger, handleprivate)

 

반응형