IT

body-parser는 express와 어떤 관계가 있습니까?

lottoking 2020. 3. 24. 08:14
반응형

body-parser는 express와 어떤 관계가 있습니까?


body-parser를 사용하지 않고 데이터를 얻을 수 있기 때문에 Express 응용 프로그램에 왜 필요한지 이해할 수 없습니다 body-parser. 그리고 실제로 무엇을하고 어떻게합니까?


Express.js 버전 4 이상 HTTP POST에서 요청 을 처리하려면 이라는 미들웨어 모듈을 설치해야합니다 .body-parser

body-parser들어오는 요청 스트림의 전체 본문 부분을 추출하여에 노출합니다 req.body.

미들웨어는 이전에 Express.js의 일부 였지만 이제 별도로 설치해야합니다.

body-parser모듈은 HTTP POST요청을 사용하여 제출 된 JSON, 버퍼, 문자열 및 URL 인코딩 데이터를 구문 분석합니다 . body-parser아래와 같이 NPM을 사용하여 설치하십시오 .

npm install body-parser --save

2019 년 4 월 2 일 수정 : express@4.16.0에서 express와 번들로 제공되는 body-parser 미들웨어. 자세한 내용은 이것을 참조하십시오


예, 우리는없이 일할 수 있습니다 body-parser. 사용하지 않으면 원시 요청이 발생하고 본문과 헤더가 request 매개 변수의 루트 객체에 없습니다. 모든 필드를 개별적으로 조작해야합니다.

또는 body-parser익스프레스 팀이 유지 관리 할 때 사용할 수 있습니다 .

본문 구문 분석기가 수행 할 수있는 작업 : 요청을 단순화합니다.
사용 방법 : 예는 다음과 같습니다.

설치 npm install body-parser --save

이 방법은 본문 파서를 Express에서 사용하는 방법입니다.

const express = require('express'),
      app = express(),
      bodyParser = require('body-parser');

// support parsing of application/json type post data
app.use(bodyParser.json());

//support parsing of application/x-www-form-urlencoded post data
app.use(bodyParser.urlencoded({ extended: true }));

링크.

https://github.com/expressjs/body-parser .

그리고 루트 요청 객체에서 본문과 헤더를 얻을 수 있습니다.

app.post("/posturl",function(req,res,next){
    console.log(req.body);
    res.send("response");
})

답은 여기에 매우 상세하고 화려하게, 대답은 포함 설명 :

한마디로; body-parser 는 들어오는 요청 스트림의 전체 본문 부분을 추출하여 req.body인터페이스하기 쉬운 것으로 노출시킵니다 . 스스로 할 수 있기 때문에 그 자체로는 필요하지 않습니다. 그러나 대부분 원하는 작업을 수행하고 문제를 해결할 수 있습니다.


좀 더 깊이 들어가기 위해; body-parser는 들어오는 요청 데이터가 압축 된 경우 nodejs / zlib사용 하여 들어오는 요청 데이터의 압축을 풀고 stream-utils / raw-body 가 요청 본문의 전체 원시 컨텐츠를 "파싱"하기 전에 대기하도록 미들웨어를 제공합니다. 요청 본문을 사용하지 않고 시간을 낭비했습니다.)

원시 컨텐츠를 보유한 후 body-parser는 사용하기로 결정한 특정 미들웨어에 따라 네 가지 전략 중 하나를 사용하여 구문 분석합니다.

  • bodyParser.raw () : 실제로 본문을 구문 분석하지 않고 이전에 버퍼링 된 내용을 Buffer on에 노출합니다 req.body.

  • bodyParser.text () : 버퍼를 일반 텍스트로 읽고 결과 문자열을 req.body에 노출합니다.

  • bodyParser.urlencoded () : 텍스트를 URL로 인코딩 된 데이터 (브라우저가 일반 양식 세트에서 POST로 양식 데이터를 보내는 방법)로 구문 분석하고에 결과 객체 (키 및 값 포함)를 노출합니다 req.body. 비교하려고; PHP에서는이 모든 것이 자동으로 수행되고에 노출됩니다 $_POST.

  • bodyParser.json () : 텍스트를 JSON으로 구문 분석하고 결과 객체를에 노출합니다 req.body.

req.body원하는 내용으로 설정 한 후에 만 스택에서 다음 미들웨어를 호출합니다. 그러면 압축 해제 및 구문 분석 방법에 대해 생각할 필요없이 요청 데이터에 액세스 할 수 있습니다.

body-parser github참조하여 설명서를 읽을 수 있으며 작동에 관한 정보가 들어 있습니다.


이 최소한의 기술을 유지하려고 노력하자.

html 양식 데이터를 node-js 서버로 전송한다고 가정하십시오 (예 : 서버에 요청을 작성 함). 서버 파일은 요청 객체 아래에서 요청을받습니다. 이제 로직으로,이 요청 객체를 서버 파일에 콘솔 로그하면 폼 데이터가 어느 위치에 있는지 확인할 수 있습니다. 당신은 실제로하지 않습니다!

데이터는 어디에 있습니까? 요청에 포함되지 않은 경우 어떻게 추출합니까?

http에 대한 간단한 설명은 http가 양식 데이터를 대상에 도달 할 때 조합되도록 비트 및 조각으로 전송한다는 것입니다. 데이터를 어떻게 추출할까요?

그러나 왜 수동으로 청크에 대한 데이터를 수동으로 구문 분석하고 조립할 때마다 이러한 고통을 겪을까요? 이를 위해“body-parser”라는 것을 사용하십시오.

body-parser는 요청을 구문 분석하고 필요한 관련 정보를 쉽게 추출 할 수있는 형식으로 변환합니다.

예를 들어 프론트 엔드에 가입 양식이 있다고 가정 해 봅시다. 작성하고 서버에 세부 사항을 저장하도록 요청하고 있습니다.

body-parser를 사용하면 요청에서 사용자 이름과 비밀번호를 추출하는 것이 아래와 같이 간단합니다.

var loginDetails = {    
    username : request.body.username,    
    password : request.body.password    
};

따라서 기본적으로 body-parser는 들어오는 요청을 구문 분석하고 양식 데이터를 포함하는 청크를 모은 다음이 본문 객체를 만들어 양식 데이터로 채 웁니다.


HTTP 요청 본문을 구문 분석합니다. 이것은 특히 원하는 정보가 본문에 포함 된 POST 또는 PUT PATCH HTTP 요청의 컨텍스트에서 적중하는 URL 이상을 알아야하는 경우에 필요합니다.

기본적으로 JSON, 일반 텍스트를 구문 분석하거나 필요에 따라 처리 할 원시 Buffer 객체를 반환하기위한 미들웨어입니다.


게시물 데이터에 액세스하려면를 사용해야 body-parser합니다. 기본적으로 body-parser표현이 본문을 읽고 Json이해할 수 있는 객체 로 구문 분석 할 수 있는 것은 무엇입니까 ?


이것들은 모두 편의상의 문제입니다.

기본적으로 질문이 '우리 사용해야 body-parser합니까?' 내 대답은 아니오 야'. 일반적으로 유연성이 떨어지고 동일한 정보를 얻기 위해 작성해야하는 코드의 양을 증가시키는보다 회로적인 경로를 사용하여 클라이언트 후 요청에서 동일한 정보를 얻을 수 있습니다.

이 질문으로 종류 같은의는 '음주 우리가 필요로 사용하기 express시작하는?' 다시 말하지만, 대답은 없습니다. 다시 말하지만 표현 된 기본 기능을 '내장'으로 수행하기 위해 더 많은 코드를 작성해야하는 번거 로움이 줄어 듭니다.

표면적으로- body-parser원시 데이터 스트림을 캡처하고 정보가 어떤 형식인지 파악하는 대신 클라이언트 요청에 포함 된 정보를 다양한 형식으로보다 쉽게 ​​얻을 수 있습니다. 정보를 사용 가능한 데이터로 수동으로 구문 분석하지 않습니다.


요청 본문 이해

POST 또는 PUT 요청을 수신 할 때 요청 본문이 애플리케이션에 중요 할 수 있습니다. 본문 데이터를 얻는 것은 요청 헤더에 액세스하는 것보다 조금 더 복잡합니다. 핸들러로 전달 된 요청 객체는 ReadableStream 인터페이스를 구현합니다. 이 스트림은 다른 스트림과 마찬가지로 다른 곳에서 청취하거나 파이프 할 수 있습니다. 스트림의 '데이터'및 '종료'이벤트를 수신하여 스트림에서 바로 데이터를 가져올 수 있습니다.

각 '데이터'이벤트에서 생성 된 청크는 버퍼입니다. 그것이 문자열 데이터가 될 것이라는 것을 알고 있다면, 가장 좋은 방법은 배열에서 데이터를 수집 한 다음 '끝'에서 연결하고 문자열 화하는 것입니다.

let body = [];
request.on('data', (chunk) => {
  body.push(chunk);
}).on('end', () => {
  body = Buffer.concat(body).toString();
  // at this point, `body` has the entire request body stored in it as a string
});

본문 파서 이해

문서에 따라

req.body 특성에서 사용 가능한 핸들러 전에 미들웨어에서 수신 요청 본문을 구문 분석하십시오.

첫 번째 예에서 보았 듯이 본문을 추출하기 위해 들어오는 요청 스트림을 수동으로 구문 분석해야했습니다. 서로 다른 유형의 여러 양식 데이터가있는 경우에는 지루한 작업이됩니다. 따라서이 모든 작업을 수행하는 body-parser 패키지를 사용합니다.

다양한 유형의 데이터를 구문 분석하기위한 4 개의 모듈을 제공합니다.

원시 컨텐츠 본문 파서가 있으면 위의 전략 중 하나를 사용하여 (사용하기로 결정한 미들웨어에 따라) 데이터를 구문 분석합니다. 설명서를 읽으면 더 자세한 내용을 읽을 수 있습니다.

req.body구문 분석 된 본문으로 설정 한 후 body-parser는 next()스택 아래로 다음 미들웨어를 호출 하기 위해 호출합니다. 그러면 압축 해제 및 구문 분석 방법에 대해 생각할 필요없이 요청 데이터에 액세스 할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/38306569/what-does-body-parser-do-with-express

반응형