body-parser는 Express.js 애플리케이션에서 들어오는 HTTP 요청의 body를 파싱하기 위한 미들웨어 패키지입니다.
HTTP 요청은 보통 헤더와 바디로 구성되어 있는데, 헤더는 요청에 대한 메타데이터를 담고, 바디는 실제 데이터를 담고 있습니다. 예를 들어, HTML form을 사용해 데이터를 서버로 전송하는 경우, form 데이터는 HTTP 요청의 body에 담겨서 전송됩니다.
HTTP 요청 본문을 파싱(parse)하여 req.body 객체로 만들어주기 때문에, 클라이언트가 요청한 데이터를 쉽게 가져와서 처리할 수 있고 여러 가지 유형의 요청 데이터를 파싱할 수 있습니다
- .json() : JSON 형식의 본문 파싱
- .urlencoded() : URL로 인코딩된 본문 파싱
- .raw() : 가동되지 않은 바이너리 자료 파싱
- .text() : text형식의 본문 파싱
> 설치하기
npm install body-parser --save
> 사용하기
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
// JSON 형태의 요청 바디를 파싱할 수 있도록 등록합니다.
app.use(bodyParser.json());
// URL-encoded 형태의 요청 바디를 파싱할 수 있도록 등록합니다.
app.use(bodyParser.urlencoded({ extended: true }));
// 라우터를 등록합니다.
app.get('/', (req, res) => {
res.send('Hello, World!');
});
app.use() 함수를 사용하여 미들웨어로 등록합니다.
함수 호출시에 bodyParser.json()과 bodyParser.urlencoded() 메서드를 이용해 JSON 및 URL-encoded 데이터를 파싱할 수 있도록 등록합니다.
.
< extended:true 옵션 >
URL-encoded 데이터가 객체 또는 배열을 포함하는 경우, 해당 데이터를 파싱하는 데 사용되는 옵션입니다.
URL-encoded 데이터는 기본적으로 문자열로 처리되지만, extended: true 옵션을 사용하면 객체 또는 배열을 포함하는 데이터를 파싱할 수 있습니다.
아래의 URL-encoded 데이터가 있다고 가정한다면,
name=John&age=30&hobbies[0]=reading&hobbies[1]=swimming
데이터를 파싱했을 때 아래와 같은 객체가 생성됩니다.
{
name: "John",
age: "30",
hobbies: ["reading", "swimming"]
}
그런데 extended: false로 설정된 경우라면 hobbies 데이터를 파싱할 수 없기 때문에 아래와 같이 생성됩니다.
{
name: "John",
age: "30",
'hobbies[0]': "reading",
'hobbies[1]': "swimming"
}
객체 또는 배열을 포함하는 URL-encoded 데이터를 파싱해야하는 경우 extended: true 옵션을 사용하는 것이 좋겠습니다.
> 요청 처리하기
< req.body 객체 >
클라이언트가 전송한 HTTP 요청의 body 데이터를 파싱하여 저장하는 객체입니다. 주로 POST나 PUT 요청에서 전달하는 데이터를 처리할 때 사용됩니다.
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
// body-parser middleware 설정
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
// POST 요청 처리
app.post('/users', (req, res) => {
const name = req.body.name;
const email = req.body.email;
// name, email 등의 데이터를 DB에 저장하는 로직
res.send('User created successfully');
});
위 코드는 /users 경로로 POST 요청이 들어오면 req.body 객체를 사용하여 전달된 name과 email 데이터를 처리하고 응답을 보내는 예시입니다.
> Express 4.16.0 버전 이후
Express 4.16.0 버전 이후라면 body-parser모듈이 일부기능이 내장되어 있어서 위처럼 설치해서 사용하지 않고 아래와 같이 미들웨어를 등록 하기만하면 됩니다.
const express = require('express');
const app = express();
app.use(express.json()); // JSON 데이터를 파싱하는 미들웨어
app.use(express.urlencoded({extended: true})); // URL-encoded 데이터를 파싱하는 미들웨어
express.json()은 기본적으로 Content-Type이 application/json인 요청에서 요청 body에서 JSON 데이터를 추출합니다. 이를 사용하려면 Express 애플리케이션 객체를 생성한 후, app.use(express.json()) 코드를 추가하면 되는 것입니다.
그러나 body-parser 모듈에는 몇 가지 옵션과 메서드가 있을 수 있으므로, 특정 상황에서는 추가적인 기능이 필요할 수 있습니다. 이 경우에는 필요한 경우에만 body-parser 모듈을 별도로 설치하고 사용하면 됩니다.
'STUDY > ExpressJS' 카테고리의 다른 글
[5-1-1] Express.js 파라미터를 이용한 동적 URL처리 (0) | 2023.04.05 |
---|---|
[4-3] Express.js 미들웨어 등록 메소드 - app.use() (0) | 2023.03.31 |
[5-2] Express.js 라우팅 방식 - app.get() vs app.route() vs router.route() (0) | 2023.03.30 |
[5-1] Express.js 라우팅(Routing), 라우트(Route), 라우터(Router) (0) | 2023.03.29 |
[4-2] express.js 미들웨어 여러 기능들 (0) | 2023.03.27 |