app.use의 사용

sungjin6576·2022년 6월 29일
0

nodejsClass

목록 보기
2/2

1. app.use는 어떤 쓰임새인가

app.use("/path",(req,res,next) => {} ) 하면
어떤 method(get, post, delete, put)로 그 path에 접근해도 그 다음 오는 middleware를 실행한다

여기서 path도 생략하면 모든 path에 대해 해당 middleware를 실행하는 것이다

또한 middleware에 next()가 있을 경우 해당 path에 해당하는 그 다음 middleware도 적용할 수 있다

app.use((req, res, next)=>{
  ...
  next();
})

app.use("/test",(req, res, next)=> {
  ...
  next();
})

app.get("/test",(req, res)=> {
  ...
})

get method로 /test에 접근하면 세가지 middleware 모두 실행된다
(단 next()를 하면 같은 req, res 객체를 공유하는 것이므로 res.send를 위에서 썼다면 밑의 middleware는 실행되지 않거나 오류 발생)

2. app.use를 할 때도 서순을 잘 지켜야한다

내가 했었던 실수를 예시로 가져오자면


// app.js
const express = require("express");
const app = express();
const router = require("./test");

app.use("/test",router)

app.use(express.urlencoded({extended:true});
app.use(express.json());


app.listen(4000,()=>console.log("server listening to http://localhost:4000)

// test.js
const express = require("express");
const router = express.Router();

router.post("/",(req,res) => {
  const data = req.body;
  res.send(data);	
}

module.exports = router;            

app.use(express.urlencoded({extended:true});
app.use(express.json());

이 두 줄은 각각 post method에 담긴 data가 string일 때와 json 타입(object) 일 때 req.body를 만들어주는 middleware이다

app.use("/test",router)를 이들보다 위에서 했으므로 localhost:4000/test 로 data를 어떤 방식으로 post 하던 간에 req.body는 빈 값이 나오게 된다

0개의 댓글