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
'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 |