๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Parser๋Š” ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”๊ฐ€?

๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋กœ ‘๊ฐ€๊ณต'ํ•˜๋Š” ๊ณผ์ •์„ parsing ์ด๋ผ ํ•˜๋ฉฐ ๊ทธ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“ˆ ํ˜น์€ ๋ฉ”์†Œ๋“œ๋ฅผ parser ๋ผ ์ผ์ปซ๋Š”๋‹ค.

๋‚ด๊ฐ€ ๋ชจ๋ฅด๋Š” ์–ธ์–ด๋ฅผ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์–ธ์–ด์˜ ๊ตฌ์กฐ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์ผ์ข…์˜ ๊ตฌ๋ฌธ ํ•ด์„๊ธฐ๋ผ๊ณ  ๋งํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

parser๋Š” ๊ตฌ๋ฌธ ํ•ด์„์„ ํ•  ๋ฟ ๋ฒˆ์—ญ์„ ํ•˜์ง„ ์•Š๋Š”๋‹ค. ๋ฒˆ์—ญ์˜ ์—ญํ• ์€ compiler์—์„œ ๋‹ด๋‹นํ•œ๋‹ค.

๋‚ด๊ฐ€ ์›ํ•˜๋Š” ํ˜•์‹์— ๋งž์ถฐ ํ•ด์„ํ•˜๋Š” ์šฉ๋„์ด๋ฏ€๋กœ bodyParser ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ cookieParser, JSON.parse, JSON.stringify ..๋“ฑ ํŒŒ์„œ์˜ ์ข…๋ฅ˜๋Š” ์…€ ์ˆ˜ ์—†์ด ๋งŽ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด bodyParser๋Š” ๋ฌด์—‡์„ ํŒŒ์‹ฑํ•˜๋Š”๊ฐ€?

Contains key-value pairs of data submitted in the request body.
By default, it is undefined, and is populated when you use body-parsing middleware such as body-parser and multer.

express ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด ๋ฏธ๋“ค์›จ์–ด ์—†์ดreq.body ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ธฐ๋ณธ์œผ๋กœundefined ๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ bodyParser, multer์™€ ๊ฐ™์€ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ ๋ฐ์ดํ„ฐ ๊ฐ’์— ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค๋Š” ์•ˆ๋‚ด๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ API post ์™€ put ๋ฉ”์†Œ๋“œ๋กœ ์š”์ฒญ์‹œ (get delete ๋Š” ๋ถˆ๊ฐ€ํ•˜๋‹ค. ๋งํฌ ์ฐธ๊ณ ) body ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด ๊ฐ’์„ ์„œ๋ฒ„ ์ธก์—์„œ ๋ฐ›๋Š”๋‹ค๊ณ  ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ์„œ๋ฒ„ ๋‚ด์—์„œ ํ•ด์„ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ๋ณ€ํ˜•ํ•ด์•ผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
์ด๋•Œ API ์š”์ฒญ์—์„œ ๋ฐ›์€ body ๊ฐ’์„ ํŒŒ์‹ฑํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด bodyParser ๋ผ๋Š” ๋ฏธ๋“ค์›จ์–ด์ด๋‹ค.

 

BodyParser

HTTPpost put ์š”์ฒญ์‹œ request body ์— ๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๊ฐ’์„ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ตฌ๋ฌธ์œผ๋กœ ํŒŒ์‹ฑํ•จ๊ณผ ๋™์‹œ์— req.body ๋กœ ์ž…๋ ฅํ•ด์ฃผ์–ด ์‘๋‹ต ๊ณผ์ •์—์„œ ์š”์ฒญ์— body ํ”„๋กœํผํ‹ฐ๋ฅผ ์ƒˆ๋กœ์ด ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฏธ๋“ค์›จ์–ด

 

express 4.16.0 ๋ฒ„์ „์—์„œ๋Š” bodyParser๊ฐ€ express generator์— ๋‚ด์žฅ๋˜์–ด ์žˆ์–ด ๋”ฐ๋กœ ์„ค์น˜ํ•˜์ง€ ์•Š์•„๋„

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

์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ
ํ˜„์žฌ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” 4.16.1 ๋ฒ„์ „์—์„œ๋Š” bodyParser๊ฐ€ ๋‹ค์‹œ ๋–จ์–ด์ ธ ๋‚˜์˜จ ๊ฒƒ ๊ฐ™๋‹ค. ์„ค์น˜๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ปค๋งจ๋“œ ๋ผ์ธ์—์„œ ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋กœ ์„ค์น˜ํ•œ ํ›„

npm i body-parservar 
express = require('express') var 
bodyParser = require('body-parser') 
var app = express() // parse application/x-www-form-urlencoded 
app.use(bodyParser.urlencoded({ extended: false })) // parse application/json 
app.use(bodyParser.json())

์•ฑ, ๋ผ์šฐํŠธ ๋“ฑ ์›ํ•˜๋Š” ๋ ˆ๋ฒจ์—์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์—ฐ๊ฒฐ์‹œํ‚ค๋ฉด ๋œ๋‹ค. ๋งํฌ ์ฐธ๊ณ 

์ด๋ ‡๊ฒŒ ์„ค์ •ํ•œ ํ›„ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ { name: 'yejinh', job: ...} ์™€ ๊ฐ™์€ JSON ํ˜•์‹์˜ ๋ฐ”๋””๋ฅผ ๋ณด๋‚ด๋ฉด ์„œ๋ฒ„ ์ธก์—์„œ req.body ํ˜น์€ req.body.name, req.body.job ๋“ฑ์œผ๋กœ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— ๊ณง๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

urlencoded({ extended: false });

bodyParser ๋ฏธ๋“ค์›จ์–ด์˜ ์—ฌ๋Ÿฌ ์˜ต์…˜ ์ค‘์— ํ•˜๋‚˜๋กœ false ๊ฐ’์ผ ์‹œ node.js์— ๊ธฐ๋ณธ์œผ๋กœ ๋‚ด์žฅ๋œ queryString, true ๊ฐ’์ผ ์‹œ ๋”ฐ๋กœ ์„ค์น˜๊ฐ€ ํ•„์š”ํ•œ npm qs ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

_queryString The querystring module provides utilities for parsing and formatting URL query strings. _qs A querystring parsing and stringifying library with some added security.

queryString ๊ณผ qs ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋‘˜ ๋‹ค url ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์„ ํŒŒ์‹ฑํ•ด์ฃผ๋Š” ๊ฐ™์€ ๋งฅ๋ฝ์— ์žˆ์œผ๋‚˜ qs๊ฐ€ ์ถ”๊ฐ€์ ์ธ ๋ณด์•ˆ์ด ๊ฐ€๋Šฅํ•œ ๋ง ๊ทธ๋Œ€๋กœ extended ํ™•์žฅ๋œ ํ˜•ํƒœ์ด๋‹ค.
๊ธฐ๋ณธ์ด true ๊ฐ’์ด๋‹ˆ qs ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด false ๊ฐ’์œผ๋กœ ๋”ฐ๋กœ ์„ค์ •์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

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

 

 

 

 

 

 

 

 

๋ฐ˜์‘ํ˜•