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
★★★★★★★★★★★★★★★★★」end
json이 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
★★★★★★★★★★★★★★★★★」end
express.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
'source' 카테고리의 다른 글
size of(my_arr)[0]이 컴파일되고 size of(my_arr[0])이 같은 이유는 무엇입니까? (0) | 2022.09.12 |
---|---|
단일 Amazon RDS 인스턴스에 생성할 수 있는 데이터베이스 수 (0) | 2022.09.12 |
jQuery: 특정 클래스 이름을 가진 div가 있는지 확인합니다. (0) | 2022.09.12 |
JSP/Java에서 전체 부품과 부분 부품을 더블에서 가져오려면 어떻게 해야 합니까? (0) | 2022.09.12 |
python은 파일에 얼마나 자주 플러시됩니까? (0) | 2022.09.12 |