흰 스타렉스에서 내가 내리지

static, body-parser 미들웨어 본문

Node.js

static, body-parser 미들웨어

주씨. 2022. 5. 19. 13:27
728x90

static

express에서 기본적으로 제공되는 미들웨어이다.

정적인 파일들을 제공하는 라우터 역할을 한다.

 

app.use("요청 경로", express.static("실제 경로"));
app.use("/", express.static(path.join(__dirname, "static")));

static 폴더에 우리의 html, css, js, 이미지 파일들을 저장한다.

서버의 폴더경로와 클라이언트의 요청 경로가 다르게 되므로, 클라이언트 측에서 서버의 구조를 쉽게 파악할 수가 없다.

이는 보안에 큰 도움이 된다.

 

만약 해당하는 파일이 없으면 자동으로 내부적으로 next를 호출한다. 

파일을 발견했다면, 응답으로 파일을 보내고 next는 호출하지 않는다. 따라서 다음 미들웨어는 실행되지 않는다.

 

 

 

body-parser

요청의 본문에 있는 데이터를 해석해서 req.body 객체로 만들어준다. 

보통 form 데이터나 AJAX 요청의 데이터를 처리하며, 멀티파트(이미지, 동영상, 파일) 데이터를 처리하지 못한다.

(멀티파트 데이터는 multer 모듈을 사용한다. )

 

app.use(express.json());
app.use(express.urlencoded({ extended: false }));

express에서 body-parser의 일부기능이 내장되어 있으므로 따로 설치는 안 해도 된다. 

하지만 JSON과 URL-encoded 형식의 데이터 외에도 Raw(버퍼 데이터), Text 형식의 데이터도 해석할 수 있으므로, 이때는 npm을 통해서 설치하자.

 

const bodyParser = require('body-parser')
app.use(bodyParser.raw());
app.use(bodyParser.text());

URL-encoded는 주소 형식으로 데이터를 보내는 방식이다. form 전송이 이 방식을 주로 사용한다. 

urlencoded의 extended 옵션을 보면,

false 이면 노드의 querystring 모듈을 사용하여 쿼리스트링을 해석하고, 

true이면 qs모듈을 사용하여 쿼리스트링을 해석한다.

qs는 npm패키지이며 querystring모듈을 확장한 것이다. 

 

 

그래서 이게 뭐냐?

request에 JSON 형식으로 {name: 'joos', job: 'student'}가 들어있으면, req.body에 자동으로 실린다. 

URL-encoded 형식으로 name=joos&job=student 들어오면, req.body에 json 형식으로 자동으로 실린다.

😎

 

 

  • .urlencoded()은 x-www-form-urlencoded형태의 데이터를
  • .json()은 JSON형태의 데이터를 해석해줍니다.

 

app.use(express.urlencoded({ extended: false }));
  • extended: false로 옵션을 주면 NodeJs에 기본으로 내장된 querystring모듈을 사용합니다.
  • extended: true를 하면 추가로 설치가 필요한 qs모듈을 사용합니다.
  • 다행히 qs모듈은 현재 express에 포함되어 자동으로 설치됩니다