Express에서 요청 본문을 json이 아닌 일반 텍스트로 강제 해석하려면 어떻게 해야 합니까?
nodejs + Express(v3)를 다음과 같이 사용하고 있습니다.
app.use(express.bodyParser());
app.route('/some/route', function(req, res) {
var text = req.body; // I expect text to be a string but it is a JSON
});
요청 헤더를 확인했는데 content-type이 없습니다."Content-Type"이 "text/plain"인 경우에도 JSON으로 해석됩니다.미들웨어에 항상 본문을 json이 아닌 일반 텍스트 문자열로 해석하도록 지시하는 방법은 없습니까?의 이전 버전req
가지고 있었다req.rawBody
이 문제를 회피할 수 있지만, 지금은 그렇지 않습니다.Express에서 본문을 일반 텍스트/문자열로 강제 해석하는 가장 쉬운 방법은 무엇입니까?
디폴트bodyParser.text()
는 텍스트/문자만 처리합니다.포함할 유형 옵션 변경*/json
또는*/*
.
app.use('/some/route', bodyParser.text({type: '*/*'}), function(req, res) {
var text = req.body; // I expect text to be a string but it is a JSON
});
//or more generally:
app.use(bodyParser.text({type:"*/*"}));
여기서 문서를 찾을 수 있습니다.
express 4.x에서는 bodyParser https://www.npmjs.org/package/body-parser 에서 텍스트파서를 사용할 수 있습니다.
앱 추가만 하면 됩니다.
app.use(bodyParser.text());
원하는 경로에서도
router.all('/',function(req,res){
console.log(req.body);
})
의 사용을 삭제한 경우bodyParser()
미들웨어, 텍스트여야 합니다.를 표시할 수 있습니다.bodyParser
자세한 내용은http://http://www.senchalabs.org/connect/middleware-bodyParser.html 를 참조해 주세요.
다음 행을 삭제합니다.
app.use(express.bodyParser());
편집:
당신 말이 맞는 것 같군요.직접 만들 수 있습니다.rawBody
그 사이에 미들웨어를 사용하세요.단, 이 경우에도 디세블로 해야 합니다.bodyParser()
주의:req.body
앞으로도 그럴 것이다undefined
.
다음은 데모입니다.
app.module
var express = require('express')
, http = require('http')
, path = require('path')
, util = require('util');
var app = express();
function rawBody(req, res, next) {
req.setEncoding('utf8');
req.rawBody = '';
req.on('data', function(chunk) {
req.rawBody += chunk;
});
req.on('end', function(){
next();
});
}
app.configure(function(){
app.set('port', process.env.PORT || 3000);
app.use(rawBody);
//app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
});
app.post('/test', function(req, res) {
console.log(req.is('text/*'));
console.log(req.is('json'));
console.log('RB: ' + req.rawBody);
console.log('B: ' + JSON.stringify(req.body));
res.send('got it');
});
http.createServer(app).listen(app.get('port'), function(){
console.log("Express server listening on port " + app.get('port'));
});
test.discloss를 실행합니다.discloss 。
var request = require('request');
request({
method: 'POST',
uri: 'http://localhost:3000/test',
body: {'msg': 'secret'},
json: true
}, function (error, response, body) {
console.log('code: '+ response.statusCode);
console.log(body);
})
이게 도움이 됐으면 좋겠다.
본문을 디코딩하는 방법을 내용 유형으로 이해합니다.4.x부터 라이브러리에 내장된 특정 디코더가 미들웨어에 포함되어 있어야 합니다.
app.use(express.text())
app.use(express.json())
이를 달성하기 위해 두 가지 중요한 것이 있습니다.
- 본문에서 텍스트를 처리하려면 텍스트 미들웨어를 추가해야 합니다.
- 요청에 오른쪽 머리글 "Content-type: text/plain"을 추가하여 콘텐츠 유형을 설정해야 합니다.
여기 둘 다 샘플 코드입니다.
const express = require('express');
const app = express();
const bodyParser = require('body-parser')
//This is the needed text parser middleware
app.use(bodyParser.text());
app.post('/api/health/', (req, res) => {
res.send(req.body);
});
const port = process.env.PORT || 3000;
app.listen(port, () => console.log(`Listening on ${port} ${new Date(Date.now())}`));
이것을 index.js로 저장합니다.
의존 관계를 인스톨 합니다.
npm i -S express
npm i -S body-parser
실행하다.
node index.js
이제 요청을 보내십시오.
curl -s -XPOST -H "Content-type: text/plain" -d 'Any text or json or whatever {"key":value}' 'localhost:3000/api/health'
당신이 올린 글을 다시 보내는 것을 볼 수 있을 거예요.
플레인 사용 가능TextParser(https://www.npmjs.com/package/plaintextparser) 미들웨어..
let plainTextParser = require('plainTextParser');
app.use(plainTextParser());
또는
app.post(YOUR_ROUTE, plainTextParser, function(req, res) {
let text = req.text;
//DO SOMETHING....
});
해냈다.
router.route('/')
.post(function(req,res){
var chunk = '';
req.on('data', function(data){
chunk += data; // here you get your raw data.
})
req.on('end', function(){
console.log(chunk); //just show in console
})
res.send(null);
})
express 및 bodyParser 버전이 적절한 버전으로 업그레이드되었는지 확인합니다.express 4.x 와 bodyParser 1 1.18.x 로 하면 됩니다.이것을 도입하면, 다음의 기능이 유효하게 됩니다.
app.use(bodyParser.text());
언급URL : https://stackoverflow.com/questions/12345166/how-to-force-parse-request-body-as-plain-text-instead-of-json-in-express
'source' 카테고리의 다른 글
angularjs를 사용하여 차트 생성 (0) | 2023.03.28 |
---|---|
json을 변수에 로드하다 (0) | 2023.03.28 |
JavaScript:JSONP를 작성하려면 어떻게 해야 하나요? (0) | 2023.03.28 |
WordPress WXR 사양 (0) | 2023.03.28 |
React.js에서 CSV 파일을 업로드하고 읽는 방법은 무엇입니까? (0) | 2023.03.28 |