2014-06-10 2 views
1

클라이언트를 json.stringify 사용할 때 몸은 엉망 :Node.js를

$.ajax({ 
    url: some_url, 
    type: 'post', 
    dataType: 'json', 
    data: JSON.stringify({myArray: []}) 
    ... 
} 

$.ajax({ 
    url: some_url, 
    type: 'post', 
    data: {myArray: []} 
    ... 
} 

서버 :

var app = express(); 
app.use(bodyParser()); // body-parser module 
app.use(function(req, res, next){ 
    console.log(req.body); 

    // When stringified, prints: { '{"myArray":': { ']': '' } } 
    // When not stringified, prints: {} 

}); 

내 배열이 비어 있기 때문에,이 게시되지 않는다는 것을 이해하지만 왜 출력물이 왜 문자열 화 될 때 엉망이되는지 완전히 혼란 스럽다. 그것은 시체 파서로 인한 것입니까?

내가하고 싶은 일은 배열을 검색하고 루프를 반복하면됩니다. 그것이 비어 있다면, 그렇게하십시오.

감사합니다.

답변

2

첫째로, dataType은 서버 응답에만 영향을 미칩니다. 요청 데이터와 아무 관련이 없습니다.

두 번째로, 맹 글링 된 개체의 이유는 기본적으로 jQuery의 ajax()이 의 Content-Type을 전송한다는 것입니다. 또한 body-parser 미들웨어는 기본으로 qs npm 모듈을 사용하여 querystring 노드 모듈 대신 application/x-www-form-urlencoded을 구문 분석합니다. qs 모듈은 중첩 된 구문 (예 : foo[bar]=bazfoo[]=baz)을 포함하여 querystring 이상의 기능을 지원합니다. 따라서 qs[을보고 중첩 구문의 시작이라고 생각합니다. 거기에서 기형 입력에 대해 출력이 어떻게 보이는지는 qs의 구현에 따라 다릅니다.

3

bodyParser() 미들웨어는 contentType option으로 설정할 수있는 요청의 Content-Type 헤더에 따라 복호화 다음 contentType이라고 JSON을 지정하지 않고

data: JSON.stringify({ myArray: [] }), 
contentType: 'application/json', 

, 파서는 URL의 기본을 기반으로 디코딩 할 시도합니다 인코딩하면 body 구조가됩니다.

+0

신체가 왜 엉망이 됐는지 설명했기 때문에 mscdex의 대답을 받아 들였지만 당신의 대답은 그만큼 좋았으며 가능한 한 둘 다 받아 들였습니다. –