source

Node.js 및 Express를 사용하여 POST할 때 요청 본문에 액세스하는 방법

factcode 2022. 9. 12. 11:34
반응형

Node.js 및 Express를 사용하여 POST할 때 요청 본문에 액세스하는 방법

다음 Node.js 코드가 있습니다.

var express = require('express');
var app = express.createServer(express.logger());
app.use(express.bodyParser());

app.post('/', function(request, response) {
    response.write(request.body.user);
    response.end();
});

POST를 하면 다음과 같습니다.

curl -d user=Someone -H Accept:application/json --url http://localhost:5000

나는 이해한다Someone역시나자, 완전한 요청 본문을 얻으려면 어떻게 해야 하나요?하려고 했는데response.write(request.body)그러나 Node.js는 "first 인수는 문자열 또는 버퍼여야 한다"는 예외를 슬로우하고 "Infinite loop"으로 이동합니다.이 예외는 "Cannot set headers after sended"입니다."; 설령 그렇다 해도 이 또한 사실이다.var reqBody = request.body;그리고 글쓰기response.write(reqBody).

뭐가 문제죠?

또한, raw request는 사용하지 않고 받을 수 있습니까?express.bodyParser()?

express v4.16부터는 모듈을 추가할 필요가 없습니다.내장 JSON 미들웨어를 사용하면 됩니다.

app.use(express.json())

다음과 같이 합니다.

const express = require('express')

app.use(express.json())    // <==== parse request body as JSON

app.listen(8080)

app.post('/test', (req, res) => {
  res.json({requestBody: req.body})  // <==== req.body will be a parsed JSON object
})

주의 -body-parser는 express에 이미 포함되어 있습니다.

헤더를 보내는 것도 잊지 마세요.Content-Type: application/json

Express 4.0 이후:

$ npm install --save body-parser

노드 앱에서 다음을 수행합니다.

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

Express 3.0 이하:

cURL 콜로 전달해 주세요.

--header "Content-Type: application/json"

데이터가 JSON 형식인지 확인합니다.

{"user":"someone"}

또한 node.js 코드에서 console.dir를 사용하여 다음 예시와 같이 오브젝트 내부의 데이터를 표시할 수도 있습니다.

var express = require('express');
var app = express.createServer();

app.use(express.bodyParser());

app.post('/', function(req, res){
    console.dir(req.body);
    res.send("test");
}); 

app.listen(3000);

다음 질문도 도움이 될 수 있습니다.express node.js POST 요청에서 JSON을 수신하는 방법

bodyParser 를 사용하지 않는 경우는, https://stackoverflow.com/a/9920700/446681 를 참조해 주세요.

Express 4 에서는, 다음의 코드가 유효하게 되어 있습니다.를 인스톨 할 필요가 있습니다.body-parser사용.npm.

var express = require('express');
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.urlencoded({ extended: false }));


app.listen(8888);

app.post('/update', function(req, res) {
    console.log(req.body); // the posted data
});

2019년에는 설치할 필요가 없습니다.body-parser.

다음을 사용할 수 있습니다.

var express = require('express');
var app = express();
app.use(express.json())
app.use(express.urlencoded({extended: true}))
app.listen(8888);
app.post('/update', function(req, res) {
    console.log(req.body); // the posted data
});
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json())

var port = 9000;

app.post('/post/data', function(req, res) {
    console.log('receiving data...');
    console.log('body is ',req.body);
    res.send(req.body);
});

// start the server
app.listen(port);
console.log('Server started! At http://localhost:' + port);

이게 도움이 될 거야시체를 json으로 보낼 것 같은데

사용해서는 안 됩니다.body-parser권장되지 않습니다.대신 이것을 사용해 보세요.

const express = require('express')
const app = express()

app.use(express.json()) //Notice express.json middleware

app.use()함수는 지정된 경로에 지정된 미들웨어 함수를 마운트하기 위해 사용됩니다.대부분의 경우 응용 프로그램의 미들웨어를 설정하는 데 사용됩니다.

이제 신체에 접근하려면 다음을 수행하십시오.

app.post('/', (req, res) => {
  console.log(req.body)
})

이 작업은 다음과 같이 수행할 수 있습니다.body-parser의존관계도 마찬가지야, 잘 들어request:data그리고.request:end요청 종료 시 응답을 반환합니다(아래 코드샘플 참조).참조: https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/ #request-body

var express = require('express');
var app = express.createServer(express.logger());

app.post('/', function(request, response) {

    // push the data to body
    var body = [];
    request.on('data', (chunk) => {
      body.push(chunk);
    }).on('end', () => {
      // on end of data, perform necessary action
      body = Buffer.concat(body).toString();
      response.write(request.body.user);
      response.end();
    });
});

제 경우 헤더를 설정하지 못했습니다.

"Content-Type: application/json"

이것을 시험해 보세요.

response.write(JSON.stringify(request.body));

그렇게 하면 어떤 목적을 달성할 수 있다bodyParser를 생성하여 문자열로 되돌리고 응답에 씁니다.정확한 요청 본문(같은 공백 등)을 원할 경우,data ★★★★★★★★★★★★★★★★★」endjson이 connect에서 소스 코드를 해석하는 것을 볼 수 있듯이 청크별로 문자열 청크를 구축합니다.

승인된 답변은 JSON 형식과 호환되는 본문에 대해서만 작동합니다.일반적으로 신체에 접근할 수 있는 방법은 다음과 같습니다.

app.use(
  Express.raw({
    inflate: true,
    limit: '50mb',
    type: () => true, // this matches all content types
  })
);

여기 게시된 것처럼요.req.body 가지고 있다Buffer원하는 형식으로 변환할 수 있습니다.

예를 들어 다음과 같은 방법으로 문자열에 입력합니다.

let body = req.body.toString()

또는 다음 방법으로 JSON에 접속합니다.

let body = req.body.toJSON();

포스트 데이터 덩어리를 읽는 게 귀찮다면.json을 읽기 위해 줄 아래에 붙여넣기만 하면 됩니다.

아래는 JS에서도 유사한 작업을 수행할 수 있는 TypeScript입니다.

 import bodyParser from "body-parser";
 // support application/json type post data
 this.app.use(bodyParser.json());
 // support application/x-www-form-urlencoded post data
 this.app.use(bodyParser.urlencoded({ extended: false }));

POST 콜을 수신하는 컨트롤러 중 하나에서 다음과 같이 사용

userController.ts

 public async POSTUser(_req: Request, _res: Response) {
   try {
          const onRecord = <UserModel>_req.body;
           /* Your business logic */
           _res.status(201).send("User Created");
        }
    else{
           _res.status(500).send("Server error");
           }        
   };

_req.body는 json 데이터를 TS 모델로 해석해야 합니다.

JS와 ES는 전혀 익숙하지 않지만, 다음과 같은 것이 도움이 될 것 같습니다.

JSON.stringify(req.body)

무슨 문제라도 있으면 알려줘!

아래 명령으로 본문 파서 설치

$ npm install --save body-parser

본문 파서의 설정

const bodyParser = require('body-parser');
app.use(bodyParser);
app.use(bodyParser.json()); //Make sure u have added this line
app.use(bodyParser.urlencoded({ extended: false }));

「해 보았다」라고 하는 것은, 「예상대로」 동작하는 코드에 써넣은 것과 같은 것입니다.

발생한 오류는 귀하가 보여준 코드와 관련이 없는 것으로 보입니다.

요구를 는, 를 raw 로 합니다.request★★★★★★★★★★★★★★★★의 경우data ★★★★★★★★★★★★★★★★★」endexpress.bodyParser()) 。는,data청크로 하며, " " ", ", ", ", "의 을 설정하지 않으면 합니다.data이러한 청크는 문자열이 아닌 버퍼가 됩니다.

투고 데이터를 기록하려면 다음 코드를 사용합니다.

router.post("/users",function(req,res){
    res.send(JSON.stringify(req.body, null, 4));
});

언급URL : https://stackoverflow.com/questions/11625519/how-to-access-the-request-body-when-posting-using-node-js-and-express

반응형