2011-05-08 2 views
6

내 응용 프로그램은 Express를 사용하는 Node.js입니다.Express에 POST 배열 데이터가 JSON으로 구문 분석됩니다.

jQuery를 POST를 사용하여 내 클라이언트에서이 테스트 데이터를 송신 :

{ 
title: 'hello', 
notes: [ 
{title: 'note 1'}, 
{title: 'note 2'} 
] 

}

을 그리고 이것은 내 서버 코드의 결과입니다

{ title: 'hello', notes: { '0': { title: 'note 1' }, '1': { title: 'note 2' } } } 

내가 배열을 얻으려면 내 DB에 배열로 삽입 할 노트 수 내가 뭘 놓치고 있니?


나는 8 시간 동안 답변을 자신을 추가 할 수 없습니다 (태권도 연맹?)하지만 Express.bodyParser는 JSON을 구문 분석하지 않는 이유를 정말 제대로

내가에 확인받을 수 에 응답하지 않기 때문에 사용하여 작업 : 클라이언트에서

JSON.stringify (data) 

을 다음 서버 측이 사용

JSON.parse(req.rawBody) 
,

이것은 잘못된 생각이 들며 Express.bodyParser가 JSON을 올바르게 구문 분석하지 않는 이유는 무엇입니까?!

+0

게시물에 대해이 정보를 직렬화하는 코드는 무엇이며 서버에서 역 직렬화하기 위해 어떤 코드를 사용합니까? 예 :'JSON.stringify' 등 – Tejs

+0

Express와 함께 Node.js를 사용하고 있습니다. Express.bodyParser를 사용하여 보낸 본문 요청을 구문 분석합니다. 그게 내가 Node.JS를 처음 접하는 사람이라는 사실이다. – JMWhittaker

답변

-4

모두 의미가 있습니다. Express.bodyParser을 사용하여 결과를 얻거나 JSON.parse 또는 eval('(' + myPostedData + ')')을 사용하여 색인없이 결과 개체를 얻을 수 있습니다.

현재 설정으로

, 당신이 할 필요가있다 :

for(var j = 0; j < myVariable.notes.length; j++) 
{ 
    var currentNode = myVariable.notes[j]; 

    //currentode.title should be 'note 1' for j = 0, etc 
} 
+0

나는 이론을 얻지 만 notes.length는 정의되지 않았다. – JMWhittaker

+4

클라이언트로부터 제출 된 데이터에 대해'eval'을 사용하는 것은 거대한 보안 허점입니다. 'eval'은 일반적인 규칙으로 피해야하며 자바 스크립트에서 인트로 스펙 션과 메타 프로그래밍을위한 다른 옵션이 주어지면 거의 절대 필요하지 않습니다. –

2

하면, 클라이언트 측 jQuery 코드를하시기 바랍니다 게시 할 수 있습니까? 기본적으로 jQuery는 JSON이 아닌 urlencoded로 데이터를 보냅니다. jQuery가 실제 JSON 데이터를 전송하는 방법은 this question's answer을 참조하십시오.

FYI express/connect bodyParser middleware은 JSON.parse를 사용하여 JSON (그리고 urlencoded 데이터를 구문 분석하기위한 qs.parse)을 구문 분석하기 만합니다. 나는 그 코드에 눈부신 버그가 있다고 생각하지 않는다. 따라서 브라우저에서 보내는 데이터를 다시 확인해야한다고 생각합니다.

1

다른 nodejs 자료를 찾을 때 나는이 오래된 질문을 발견했습니다.

jQuery.ajax() 함수가 JSON을 사용하여 데이터를 보내는 것은 일반적인 오해입니다. JSON 문자열이 아닌 POST 데이터로 jQuery에 의해 데이터가 전송됩니다. 따라서 모든 데이터 유형 (배열의 숫자 포함)은 문자열로 전송됩니다.

즉, express는 '배열'키를 문자열로 분석한다는 것을 의미하며 객체는 자바 스크립트에서 문자열 키를 가질 수 없기 때문에 객체로 캐스팅됩니다. 클라이언트에

16

:

$.ajax({ 
    type: 'POST', 
    data: JSON.stringify(data), 
    contentType: 'application/json', 
    url: '/endpoint' 
}); 

서버에서 :

console.log('POST: ',req.body); 

문제를 보내기 전에 주위 데이터의 jQuery 청소부입니다. 올바른 MIME 유형을 설정하면 자유 로워집니다.

+0

나는 Polymer의 core-ajax와 동일한 문제가있었습니다. contentType을 application/json으로 설정하면 문제가 해결되었습니다. 감사. – BKH

관련 문제