라우팅이란, 클라이언트의 요청 패스를 보고 해당 요청 정보를 처리할 수 있는 곳으로 기능을 전달해주는 역할를 하는 것을 라우팅이라고 한다. 즉, 클라이언트의 요청 패스에 따라서 그것을 담당하는 함수로 분리시키는 것이라고 한다. 라우터로 등록하려면 get() 메소드를 호출하여 라우터로 등록할 수 있다.
미들웨어란, 이름의 말 그대로 중간에 있는 프로그램인데, 요청(request) 과 응답(response) 의 사이에서 어느 한 과정을 처리하는 함수라고 할 수 있다. 한 마디로 익스프레스에서는 클라이언트의 요청과 응답에 관한 정보로 필요한 처리들을 할 수 있도록 따로 독립된 함수로 분리한다. 이렇게 분리한 함수들을 미들웨어라고 부른다.
미들웨어를 등록할 때는 use() 메소드를 이용하여 등록하고, 여러 미들웨어를 등록했다면 next() 메소드를 호출해서 다음 미들웨어가 처리들을 할 수 있도록 넘길 수 있다.
여러 기능들의 미들웨어들을 직접 만들려면 매우 힘들 것이다. 그래서 개발자들이 만들어놓은 미들웨어를 다운받고 불러와 사용할 수 있는데 예를 들어 serve-static, body-parser, Session, cookie-parser 등 만들어진 많은 미들웨어들이 있다. 다른 만들어진 미들웨어들을 사용하기 위해서는 npm 에서 다운받아 require() 메소드를 이용해 사용할 수 있다.
var express = require('express')
var app = express()
//미들웨어 등록
var myLogger = function (req, res, next) {
console.log('LOGGED')
next()
}
//myLogger 미들웨어 함수 사용
app.use(myLogger)
//요청 패스에 대한 라우팅 등록
app.get('/', function (req, res) {
res.send('Hello World!')
})
app.listen(3000)
위 코드는 express.js 공식 홈페이지의 guide에서 가져온 예제 코드이다. myLogger 라는 간단한 미들웨어를 등록하고 use() 메소드를 이용해 미들웨어를 사용하고 get() 메소드를 이용해 '/' 요청 패스로 라우팅을 등록하고 send()메소드로 문자열 출력을 하는 간단한 코드이다.
미들웨어들중 자주쓰이는 static 미들웨어는 특정 폴더의 파일들을 특정한 패스를 이용해 접근할 수 있도록 해준다. 예를 들어 아래와 같이 파일의 경로들이 public 폴더안에 있다고 한다면,
staticExample/public/index.html
staticExample/public/main.js
staticExample/public/style.css
아래의 코드와 같이 public 폴더에 접근할 수 있다.
app.use(express.static('public'))
물론 위와 같이 바로 접근도 할 수 있지만 static() 함수전에 첫 번째 파라미터로 요청 패스를 지정한다면 요청 패스와 static() 함수로 지정한 특정 폴더가 서로 mapping (서로 연결됨) 되어 접근할 수 있다.
app.use('/public', express.static('public'))
body-parser 미들웨어는 클라이언트가 post 방식으로 요청할 때 본문쪽에 있는 요청 파라미터들을 parsing하여 요청 객체의 body 속성에 넣어준다.
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false}));
위 코드는 body-parser를 사용하기 위한 코드는 위의 3줄이다. use() 메소드를 사용해 bodyParser.json() 메소드를 호출하면서 json 형식으로 전달된 요청 파라미터를 파싱할 수 있고, bodyParser.urlencoded() 메소드를 호출하면서 x-www-form-urlencoded 형식으로 전달된 요청 파라미터를 파싱할 수 있다.