싸이트 ) expressjs.com
express - middleWare ; 이런 형태를 가지고 있어야 한다.
이게 3rd Party 와 같다.
middleWare 만들기
/* middleWare 만들기
: 중복되는 함수)
fs.readdir('./data', (error, filelist) => {}
*/
app.use((request, response, next) => {
fs.readdir('./data', (error, filelist) => {
request.list = filelist;
next(); //미들웨어 실행 <= next(); 호출되어야할 미들웨어가 담겨있따
})
})
console.log(request.list)의 결과)
get 방식으로 들어오는 모든 요청에 대해서만 파일 목록을 가져온다.
따라서, post방식으로 가져온 것은 처리하지 않는다.
// *: 모든요청 ,
app.get('*', (request, response, next) => {
fs.readdir('./data', (error, filelist) => {
request.list = filelist; // requestr객체에 list를 셋팅
//==> 모든 라우터들은 request 객체의 list property를 통해 filelist에 접근 가능하다
next(); //미들웨어 실행 <= next(); 호출되어야할 미들웨어가 담겨있따
})
})
// route, routing : 네비게이션. 사용자들이 여러 path로 왔을 때, 그 경로를 설정해준다.
라우트라고만 생각되었던 것에서, 2번째 인자로 전달 된 콜백은 미들웨어이다!!
express에서는 모든 게 미들웨어이다.
app.use라고 정의되면, 그 안의 미들웨어가 실행된다.
//1.
app.use(bodyParser.urlencoded({ extended: false }))
//2.
app.use(compression());
//3.
app.get('*', (request, response, next) => {
fs.readdir('./data', (error, filelist) => {
request.list = filelist;
next();
})
})
우리가 만든 인자로 전달된 콜백 function(~~)이 미들웨어이고,
app.use를 통해서 정의하면..
==> 1) 그 안의 미들웨어가 실행하고,
==> 2) 그 밑의 compression 미들웨어가 실행하고,
==> 3) get으로 감싼 미들웨어가 실행하고,
==> 4) 그 밑으로 내려가면서, path에 해당되는 미들웨어가 실행한다. (페이지에서 경로별로 라우트 해 놓은것을 말함. 브라우저에서 해당하는 경로대로 실행하잖아요~~^)
app이 구동될때, 순서대로 등록되어 있는 작은 프로그램들이 실행되는데 각각의 프로그램들이 서로를 연결해 주는 작은 소프트웨어라는 점에서 미들웨어라고 하는 것은 아닐까?.