설치
npm install express
express 불러온 후 express 사용, port 번호 지정
const express = require('express') const app = express() const port = 3000
메소드를 통한 요청, 응답 받아오기
ex)
app.get('/', (req, res) => { res.send('Hello World!') })
express.메소드(endpoint, 요청응답 콜백함수)
위와 같이 응답메소드 중 send() 메소드를 통하여 요청에 대한 응답을 보내 줄 수있다
응답 메소드 send(), json(), end() 차이
res.send()
는 send에 전해진 argument에 따라서 Content-type이 자동적으로 만들어진다. 기본으로 응답을 보낸때 사용res.json()
은 json이 아닌 것도 json 형식으로 바꾸어서 보내준다. 즉 content-type 헤더를 application/JSON으로 고정한다. 그런데 결국 res.json()도 마지막에 res.send()를 호출한다.res.end()
는 보내줄 아무 데이터도 없는데 response를 끝내고 싶을 때 사용한다.ex) res.status(400).end();
요청과 응답 사이에서의 중간 공정, 반드시 실행되는 공정
예를들어 request에 필요한 기능을 더하거나, 문제가 발견된 불량품을 밖으로 걷어내는 역할을 한다
미들웨어 예시
위의 이미지와 같이 나열된 설정들을 추가 삭제 할 수가 있다
자주 사용하는 미들웨어
미들웨어 사용시
app.use()
처럼 router.use()
도 쓸 수 있고 app.METHOD()
처럼 router.METHOD()
도 사용 가능하다
use
와 METHOD
의 차이점
use()
는 모든 METHOD에서 동작
한다는 것METHOD()
는 지정된 요청(GET, POST, PUT, DELETE 등)에서만 동작
을 한다는 것모든 요청에 의한, 모든요청에 미들웨어가 포함되길 원한다면 애플리케이션 레벨 미들웨어를 사용한다
어떤 특정한 라우팅에 관련해서 중간에 넣기를 원한다면 라우터 레벨 미들웨어를 사용한다
json 형식
const bodyParser = express.json()
bodyParser라는 변수에 express의 json 메소드를 이용하여 할당
json형식
으로만 요청을 받을 수 있다
ex)
{ "text": "southbig" }
json 메소드 strict false 적용
strict false 적용
const bodyParser = express.json({ strict: false })
strict을 false로 적용하게 되면 다른형태의 요청들을 json형태로 변환 해줄 수 있다
예를들어 json형태의 요청이 아닌 text형태(원시타입(primitive type)
)의 요청도 json형태로 변경해 준다
대신 json요청이기에 따옴표
를 꼭 붙여줘야 한다
text 형식
const bodyParser = express.text()
bodyParser라는 변수에 express의 text 메소드를 이용하여 할당
text형식
으로만 요청을 받을 수 있다
ex)
아무 text나 가능
var express = require('express'); var app = express(); var myLogger = function (req, res, next) { console.log('LOGGED'); next(); }; app.use(myLogger); app.get('/', function (req, res) { res.send('Hello World!'); }); app.listen(3000);
위와 같은 예제 코드와 같이 중간에 myLogger라는 미들웨어를 작성해 놓는다면 마지막 app.get()의 응답이 될때 무조건 myLogger는 불리게 된다
어떤부분, 어떤 요청이 진행되어 응답이 되는지 확인하는데 아주 유용하다
추가적으로 위와같이 cors와 bodyParser부분이 간단히 생략 되어 쓰여져 있지만 아래와 같이 미들웨어 로직으로 구성되어 있다
app.use(cors())
let cors = (corsOption) => { return (req, res, next) => { // cors 헤더 붙이는 로직 next() } }
app.use(bodyParser)
express.json = (option) => { return (req, res, next) => { // body 파싱하는 로직 next() } }
맨 첫번째 인자로 err를 받는다
파라미터가 4개면 오류처리, 3개면 미들웨어로 취급한다, 2개면 응답으로 취급한다
파라미터의 갯수에 따라 동작에 차이가 있다
오류 처리
app.use(function(err, req, res, next) { console.error(err.stack); res.status(500).send('Something broke!'); });
express 사용시 많이 나오는 에러
SyntaxError: Unexpected token a in JSON at position 0
이것은 json형식이 아니다