express 분석 post 방식 의 json 매개 변수

3321 단어 web
출처:http://yijiebuyi.com/blog/38f1437bf5b43fcf90e6529a81f258f1.html
node. js 에서 가장 유명한 웹 프레임 워 크 express, 이전 저 버 전 (4.0 이하) 에 의존 해 야 할 것 같 습 니 다. body Parser 가방 으로 요청 체 를 분석 합 니 다.
Express 3. x 와 4. x 버 전의 차이 점 이 박문 에 대한 이 해 를 보십시오.
나중에 버 전 으로... body Parser 계승,
express 설정 항목 에 user (express. body Parser ({keepExtensions: true, uploadDir: '/ tmp'}) 가 필요 합 니 다. 
다음 코드:
var express = require('express'),
    app = express();

app.configure(function () {
    app.use(express.bodyParser({ keepExtensions: true, uploadDir: '/tmp' }));
});

현재 Express 4.0 최신 버 전 은 body Parser 를 다시 꺼 냈 습 니 다. body - parser 는 npm install 로 설치 하여 사용 해 야 합 니 다.
npm install body-parser

Express 4.0 이상 버 전 은 시작 파일 에서 다음 과 같은 설정 을 해 야 합 니 다.
var express = require('express');
var bodyParser = require('body-parser');

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

app.use(bodyParser.json({limit: '1mb'}));  //body-parser   json    
app.use(bodyParser.urlencoded({            //      bodyParser.json   ,     
  extended: true
}));

만약 당신 의 인터페이스 가 post 에 올 라 오 는 데이터 형식 을 요구한다 면:
{"data":{"name":"  ","age":25}}

백 엔 드 express 가 body Parser 의 분석 에 들 어가 면 데 이 터 를 이렇게 읽 을 수 있 습 니 다.
req. body. data. name (장 삼 가 져 오기)
req. body. data. age (나이 까지 획득)
그러나 여 기 는 전제 가 있 습 니 다. 클 라 이언 트 가 인 터 페 이 스 를 요청 할 때 요청 헤더 형식 을 지정 해 야 합 니 다. Content - type = application / json
body Parser 는 이러한 유형의 요청 헤드 를 발견 하면 자동 으로 body 의 json 형식 데 이 터 를 정확하게 해석 합 니 다. 그렇지 않 으 면 req. body. data 는 undefined 입 니 다.
전통 적 인 서버 엔 드 언어 는 post 에서 올 린 흐름 을 받 은 다음 문자열 로 바 꾸 어 마지막 으로 json 으로 포맷 할 수 있 습 니 다. 이렇게 application / json 을 추가 하지 않 습 니 다. 요청 헤드 는 모두 문제 가 없습니다.
그러나 Express 미들웨어 는 body 의 post 매개 변 수 를 분석 할 때 Content - Type 형식 을 검사 하기 때문에 정확 한 형식 을 지정 하지 않 아 미들웨어 분석 매개 변수 가 잘못 되 었 습 니 다.
그럼 어떻게 처리 할 까요?
많은 곳 에서 당신 의 인 터 페 이 스 를 호출 하고 있 기 때문에, 당신 은 모든 사람 이 요청 머리 에 넣 었 다 는 것 을 보증 할 수 없습니다. Content-Type=application/json 
해결 방향 은:
서버 쪽 에서 먼저 req. body. data 매개 변수 로 파 라 메 터 를 가 져 옵 니 다. 성공 하면 설명 합 니 다. body Parser 는 json 인 자 를 정확하게 분 석 했 습 니 다. 아니면 이전 방법 으로 읽 었 습 니까?
req. body. data 매개 변수 가 값 이 없 거나 undefined 가 없 으 면 우 리 는 흐름 으로 post 데 이 터 를 읽 은 다음 문자열 로 바 꾸 어 json 형식 으로 해석 하여 사용 합 니 다. 코드 를 직접 올 립 니 다.
app.post('/post', function (req, res) {
    if (req.body.data) {
        //      json    post  
        res.send({"status": "success", "name": req.body.data.name, "age": req.body.data.age});
    } else {
        //      json    post  
        var body = '', jsonStr;
        req.on('data', function (chunk) {
            body += chunk; //           
        });
        req.on('end', function () {
            //            body       JSON   
            try {
                jsonStr = JSON.parse(body);
            } catch (err) {
                jsonStr = null;
            }
            jsonStr ? res.send({"status":"success", "name": jsonStr.data.name, "age": jsonStr.data.age}) : res.send({"status":"error"});
        });
    }
});

좋은 웹페이지 즐겨찾기