node-Express middleware

404·2021년 12월 22일
0

Node 💚 Express

목록 보기
5/8
post-thumbnail

app.use & middleware

app.use()는 global middleware를 생성한다.

어떤 url을 받던 작동한다는 뜻이다.

코드 작성 순서가 중요한데 아래와 같은 순서로 작성할 경우 사용자가 홈에 들어올때 부터 작동하게 된다.

const handleHome = (req, res) => {
  return res.send("welcome home");
};
const logCheckMiddleware = (req, res, next) => {
  console.log(`${req.method} ${req.url}`);
  next();
};

app.use(logCheckMiddleware);
app.get("/", handleHome); // GET /

위의 경우 logCheckMiddleware를 거친 후 handleHome이 작동된다.

하지만, app.use()의 순서를 아래와 같이 바꾸면 최초 접속시 홈에서는 미들웨어가 작동하지 않고 다른 url 요청을 받을때 작동한다.

app.use(f1,f2) 처럼 다수의 함수를 받을수도 있다.

const handleHome = (req, res) => {
  return res.send("welcome home");
};
const logCheckMiddleware = (req, res, next) => {
  console.log(`${req.method} ${req.url}`);
  next();
};

app.get("/", handleHome); // console에 찍히지 않음
app.use(logCheckMiddleware);
app.get("/h1", handleHTML); // GET /h1

모든 컨트롤러는 (req, res, next) 세 개의 argument를 가진다.
그 중 middleware로 사용되는 것은 next로 넘겨주는 작업이 필요하다.

morgan

import morgan from "morgan"; // import 뒤의 morgan은 다른걸로 교체 가능
const logger = morgan("dev"); // 선언은 필수가 아님
app.use(logger); // morgan은 logger middleware이다.

조건문을 활용한 middleware 사용 예시

const urlCheckMiddleware = (req, res, next) => {
  let url = req.url;
  if (url === "/protected") {
    return res.send("<h1>Not Allowed<h2>");
  }
  console.log("lets go next");
  next();
};

no.1 예제 복습

const pracMiddleware = (req, res, next) => {
  console.log(`client is going ${req.url}`);
  next();
};
const handleHome = (req, res) => {
  return res.send("welcome home");
};
app.get("/", pracMiddleware, handleHome); // cclient is going /
profile
T.T

0개의 댓글