- Node.js 환경에서 Express.js는 웹 서버, 또는 API 서버를 제작하기 위해 사용되는 인기 있는 프레임워크입니다.
- http 모듈로 만드는 대신에 express를 사용하여 서버를 만들면, 미들웨어의 추가가 편하고, 자체 라우터를 제공한다.
- 이를 통해서 express로 더 쉽게 웹 서버를 만들 수 있다.
🥭 npm init으로 시작할 수 있다.
🥭 npm i express로 설치할 수 있다.
를 통해서 express를 설치해 사용할 수 있다.
express의 공식문서
https://expressjs.com/ko/starter/hello-world.html
를 참고하여 간단한 서버를 만들 수 있다.const express = require('express'); const app = express(); // 위의 코드로 express를 불러오고 express로 서버를 만든다. const port = 3000 app.get('/', (req, res) => { res.send('Hello World!') }) /* 서버를 키고 설정된 3000번 포트의 '/' endpoint에 웹 브라우저로 접속할 시 Hello Wolrd 를 response한다. */ app.listen(port, () => { console.log(`Example app listening on port ${port}`) })
- 서버를 실행하는 방법은 node 만든 서버 파일.js 를 통해 실행한다.
const router = express.Router();
// 라우터 기능을 사용한다.
router.get('/lower', (req, res) =>{
res.send(data);
})
// get이외에도 post, delete, put등을 사용할 수 있다.
- 미들웨어를 통해서 간편하게 request에 필요한 기능을 추가하거나, 에러를 탐지할 수 있다.
const app = express();
app.get('/', function(req, res, next){
next();
});
메소드를 사용하고, 인자로 경로와 미들웨어 함수를 받는다.
미들웨어 함수의 인자로는 순서대로 미들웨어 함수에 대한 요청(req), 응답(res), 콜백 인수(next)이다.
next를 통해서 다음 미들웨어 함수를 실행한다.
특정 endpoint 경로가 아니라 모든 요청에 동일한 미들웨어 함수를 적용하고자 한다면, 매소드 app.use()를 사용한다.
const myLogger = function (req, res, next) {
console.log("http request method : " + req.method
+ ", url :" + req.originalUrl);
next();
};
app.use(myLogger);
/*
이렇게 로그 기능을 추가하여,
모든 요청에 대해서 매소드와 url을 확인할 수 있다.
*/
const bodyParser = require('body-parser');
const jsonParser = bodyParser.json();
app.use(express.json({strict: false}));
app.post('/upper', jsonParser, function (req, res) {
// req.body에는 JSON의 형태로 payload가 담겨져 있습니다.
res.send(req.body.toUpperCase());
// 요청에서 받은 body의 내용을 대문자로 하여 응답한다.
})
body-parser 미들웨어를 통해서 네트워크상의 chunk를 합치고, buffer를 body로 변환하는 작업을 간편할 수 있다.
위와 같이 body-parser 미들웨어를 사용하여 쉽게 요청에 포함된 body를 받을 수 있다.
body-parser 미들웨어를 사용하기 위해서 npm install body-parser로 설치한다.
app.use(express.json({strict: false})); 를 통해서 배열과 객체뿐만 아니라 JSON.parse()할 수 있는 모든 변수를 받아들인다.
만약 app.use(express.json({strict: false}));가 없고, request 헤더에 'Content-Type': 'application/json'이 설정되어 있다면, POST로 text가 왔을 때, 빈 객체만 반환된다.
res.send를 통해서 응답에 데이터를 담아 보낼 수 있다.
res.json에는 res.send가 포함되어 있다.
res.json은 'Content-Type', 'application/json'을 설정하고, 받은 인자를 JSON으로 변환하여 보낸다.
JSON 데이터를 보낼 때에는 res.json을 사용한다.
text로 요청을 할 때는 단순 요청(Simple requests)으로 OPTIONS 매소드 요청이 발생하지 않는다.
JSON으로 요청하면, preflighted request가 발생한다.
cors 미들웨어를 사용하여 쉽게 이를 할 수 있다.
npm install cors를 통해 설치한다.
const cors = require('cors');
app.use(cors());
// 모든 요청에 대해 CORS를 허용한다.
const cors = require('cors');
// 특정 요청에 대해 CORS 허용
app.get('/lower', cors(), function (req, res, next) {
res.json({name : "John"})
});
로그인 정보(토큰)이 있는지 확인한다.
토큰이 없으면, 에러 응답을 한다.
app.use((req, res, next) => {
// 토큰이 있을 때만 진행한다.
if(req.headers.token){
req.isLoggedIn = true;
next()
} else {
res.status(400).send('invalid user')
}
})