다음 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는 ” 첫 번째 인수는 문자열 또는 버퍼 여야합니다 “라는 예외를 발생시키고 ” 송신 후 헤더를 설정할 수 없습니다 “라는 예외와 함께 “무한 루프”로갑니다 . ;; 내가 var reqBody = request.body;
한 다음 글을 쓰 더라도 마찬가지 response.write(reqBody)
입니다.
여기서 무슨 문제가 있습니까?
또한 사용하지 않고 원시 요청을 얻을 수 express.bodyParser()
있습니까?
답변
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 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부터 다음 코드가 트릭을 수행하는 것으로 보입니다. 을 사용 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
});
답변
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으로 시체를 보내고 있다고 가정합니다.
답변
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
});
답변
이것은없이 달성 할 수 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();
});
});
답변
이 시도:
response.write(JSON.stringify(request.body));
그것은 bodyParser
당신을 위해 만든 객체를 가져 와서 다시 문자열로 바꾸고 응답에 씁니다. 정확한 요청 본문 (같은 공백 등)을 원하면 요청에서 리스너 가 필요 data
하며 end
연결에서 json 구문 분석 소스 코드에서 볼 수 있듯이 청크별로 문자열 청크를 작성합니다 .
