Web/Node.js

[스터디/Node.js교과서] 익스프레스 웹 서버 만들기 - 01 미들웨어란?

왓챠 2021. 3. 29. 17:12

<app.js>

const app=express();

app.set(키, 값): 데이터를 저장. 이 데이터를 app.get(키)로 가져올 수 있음

app.get(주소, 라우터): 주소에 대한 GET요청이 올 때 어떤 동작을 할지 적는 부분

- app.get('/', (req,res)=>{

res.send('Hello Express');  : 응답을 보냄

res.sendFile(path.join(__dirname, 'index.html')); : HTML로 응답. 파일의 경로를 path모듈을 사용해 지정

  });

이 외에도 app.post, app.put, app.patch, app.delete, app.options 메서드가 존재

app.listen(포트); : 포트를 연결하고 서버를 실행


미들웨어 : 요청과 응답의 중간.요청과 응답을 조작해 기능 추가, 나쁜 요청을 걸러내기도 함. 라우터와 에러 핸들러 또한 미들웨어의 일종

app.use(미들웨어) 모든 요청에서 미들웨어 실행
app.use('/abc', 미들웨어) abc로 시작하는 요청에서 미들웨어 실행
app.post('/abc', 미들웨어) abc로 시작하는 POST요청에서 미들웨어 실행

여러 개의 미들웨어가 연결되어 있는 경우, 다음 미들웨어로 넘어가기 위해서는 next();를 사용해야 한다. cookie-parser, express-session, morgan등의 미들웨어 패키지를 설치한 경우, req, res, next 가 내부에 들어있고, next 또한 내부적으로 호출하기 때문에 다음 미들웨어로 넘어갈 수 있다. req 객체에 데이터를 넣어 현재 요청이 처리되는 동안에 다른 미들웨어 간에 데이터를 공유할 수 있다. ( ex: req.data='데이터 넣기')


- static 미들웨어 : express 객체에서 기본 제공. 정적인 파일을 제공하는 라우터. 인수로 정적 파일이 담겨 있는 폴더(public)를 지정

app.use('요청 경로', express.static('실제 경로'));
app.use('/', express.static(path.join(__dirname, 'public')));

정적 파일을 제공할 때 next 대신 res.sendFile메서드로 응답을 보내기 때문에 express.json, express.urlencoded, cookieParser미들웨어는 실행되지 않음. 따라서 morgan, static 미들웨어 뒤에 json, urlencoded, 라우터 순으로 배치해야한다.


- body-parser 미들웨어: express에 내장. JSON, URL-encoded 형식의 데이터 해석해서 req.body 객체로 만들어주는 미들웨어. raw, text형식의 요청을 처리해야 하면 설치해야 함. 주로 AJAX요청 또는 폼 데이터 처리. 멀티파트(이미지, 동영상, 파일)데이터는 multer모듈을 사용해서 처리

app.use(express.json()); #JSON형식의 데이터 전달
app.use(express.urlencoded({extended: false})); #폼 전송 시 중첩 객체 허용하지 않음

POST, PUT요청의 본문을 전달받을 때 이 패키지가 내부적으로 스트림을 처리해 req.body에 추가