Express는 웹 서버와 API를 만들기 위한 강력하면서도 유연한 Javascript framework 이다. Javascript를 잘 쓰는 프론트앤드 개발자라고 해서 Node.js 를 잘 다룰줄 알아야하는 것은 아니지만, 요즘에는 독립적으로 프론트앤드 서버를 띄우는 경우가 많으니, 간단하게라도 사용할줄 알면 좋다.
서버 띄우기
Express는 Node 모듈이라서 import를 해줘야 사용할 수 있다. 서버를 띄우기 위해서는 express 함수가 호출되어야 한다.
const express = require('express');
const app = express();
Node에서 모듈을 import하기 위해서는 require 키워드를 사용하면 된다. 참고로 express함수가 호출되면 Express의 instance인 애플리케이션 객체를 생성한다. 이 애플리케이션(app변수)으로 서버를 시작하고, 설정하고, 응답을 받아 여러 일들을 처리할 수 있다.
port를 지정해서 서버를 띄워보자. 서버가 제대로 실행되고, 응답받을 준비가 되면 2번째 인자인 콜백함수가 호출된다.
const PORT = 4001;
app.listen(PORT, () => {
console.log(`Server is listening on port ${PORT}`);
});
app.use()와 응답/요청 메서드
app객체의 가장 기본 method는 use이다. 일단 가장 간단한 형태를 보자.
app.use((req, res) => {
res.send('hello world');
})
app.use() 는 서버에 요청이 들어올떄마다 콜백함수를 실행한다. 만약 첫 번째 인자에 특정 path를 지정해주면, 해당 path로 요청할때만 콜백을 실행한다.
콜백의 첫번째 인자인 요청 객체(req)에는 아래와 같은 메서드가 있다.
method | 설명 |
---|---|
header() | 요청 헤더의 속성을 지정하거나 추출 |
accepts() | 요청 헤더의 Accept 속성확인 |
param() | 요청 매개변수 추출 |
is() | 요청 헤더의 Content-Type 속성확인 |
app.use((req, res) => {
//header 속성 보기
const agent = req.header('User-Agent');
console.log(agent);
//매개변수 추출
const name = req.param('name');
console.log(name);
res.send('hello world');
})
콜백의 두번째 인자인 응답 객체(res)에는 아래와 같은 메서드가 있다.
method | 설명 |
---|---|
send() | 매개변수 타입에 따라 적절한 형태로 응답 |
json() | json 형태로 응답 |
redirect() | 웹 페이지 경로를 강제로 이동 |
미들웨어
use() 메서드는 여러 번 사용할 수 있고, use에 인자로 넘기는 함수를 미들웨어라고 한다.
app.use((req, res, next) => {
console.log('first');
next();
})
app.use((req, res, next) => {
console.log('second');
next();
})
app.use((req, res, next) => {
console.log('third');
res.send('end')
})
위의 코드를 실행해보면 first, second, third 가 콘솔에 찍히고 end라는 응답을 보낸다. 이렇게 요청의 응답을 보내기 전까지 중간에 여러 일들을 실행시킬 수 있다. 미들웨어를 추가하려면 use의 매개변수에 넣으면 된다. 위의 코드에서는 콜백함수가 곧 미들웨어라고 할 수 있다.
미들웨어 종류는 진짜 많고, 많은 개발자들이 개발해서 배포하고 있지만 그 중에 몇 가지만 보자.
middleware | 설명 |
---|---|
logger | 웹 요청이 들어왔을 때 로그 출력 |
bodyParser | POST 요청 매개변수 추출 |
cookieParser | 요청 쿠키를 추출 |
router | 페이지 라우트를 수행 |
static | 측정 폴더를 서버의 루트 폴더에 올림 |
reference
- codecademy
- Express 공식문서
- 모던웹을 위한 Node.js 프로그래밍