2012-08-09 3 views
-1

나는이 문제에 대한 답을 찾기 위해 며칠 째를 찾고 있었지만 아무것도 작동하지 않는 것으로 보인다. 나는 node.js에 다소 익숙하며, 클라이언트 쪽에서 POST에 응답하기 위해 서버 측에서만 작업하고 있습니다. 이것은 내가해야하는 숙제와 다소 흡사합니다. 내가 뭘 해야할지 클라이언트 스크립트가, 내가 쓰지 않았어 때 위치 '/ 정렬'매개 변수 theArray와 POST 요청을 만드는 모든 문자열이 아닌 값을 제거하고 JSON으로 결과 값을 반환 배열을 정렬해야합니다 . 클라이언트 스크립트는 stringArified JSON Array에서 theArray 매개 변수를 보냅니다. 이렇게 뭔가가이Node.js에서 JSON 정렬하기

{"theArray":"[[],\"d\",\"B\",{},\"b\",12,\"A\",\"c\"]"}.

case '/sort': 
     if (req.method == 'POST') { 
      res.writeHead(200,{ 
       'Content-Type': 'application/json' 
      }); 
      var fullArr = ""; 
       req.on('data', function(chunk) { 
        fullArr += chunk; 
        }); 
       req.on('end', function() { 
          var jPar = JSON.parse(fullArr); 
          var arr = ""; 
          var par = jPar.theArray; 
          arr += par; 

           function censor(key, value) { 
            if (typeof value == "string") { 
              return value; 
             } 
             return undefined; 
             } 
         var jsonString = JSON.stringify(par, censor); 
         console.log(jsonString); 
       });   
        res.end(); 


     }; 

break; 

을하지만이 오류와 함께이 반환 :

이 코드 여기에 시도 당신이 나에게 도움이되는 몇 가지 코드를 보여줄 수 있다면

undefined:1 
%2C%22A%22C%22 
^ 
SyntaxError: Unexpected token h 
    at Object.parse (native) ... 

누군가가 나를 도와 주시겠습니까. 감사합니다

당신이 전송 인코딩에 따라 POST 데이터를 디코딩 할 필요가

답변

1

var json = require('querystring').parse(fullArr).formParamName; 

는 POST 형태로 사용되는 실제 이름으로 formParamName 교체 (나는 그것이 귀하의 경우 application/x-www-form-urlencoded을 믿습니다). 나는 URL 처리를 떠난 querystring module documentation

+0

을했던 것처럼 나에게, 당신이 나에게 그게 내가 대답을 추가 – Chad

+0

을 기쁘게 수행하는 방법의 예를 들어 줄 수있는 방법이 있나요 보인다 예 : –

+0

JSON.parse 이전에 qs.parse를 사용했지만 그 부분이 반환되었습니다. 기본적으로 내가 바꾼 이유는 qs.parse 필요가 key1 = value1 & key2 = value2와 같은 것이라고 생각하기 때문입니다. 그리고 내가 넣는 것은 "theArray"와 같은 것입니다 : "[[], \"d \ ", \"B \ ", {}, \"b \ ", 12, \"A \ ", \"c \ "]" – Chad

0
function parseBody (req, callback) { 
    var buffer = ''; 
    req.on('data', function(chunk) { 
    buffer += chunk; 
    }); 
    req.on('end', function() { 
    try { 
     callback(null, JSON.parse(buffer)); 
    } catch(e) { 
     callback(e); 
    } 
    }); 
} 

function stringFilter(element) { 
    return typeof element === 'string'; 
} 

function requestHandler (req, res) { 
    parseBody(req, function(err, body) { 
    if(err) { 
     res.writeHead(400, { 
     'Content-Type': 'application/json' 
     }); 
     return res.end(err.toString()); 
    } 

    res.writeHead(200,{ 
     'Content-Type': 'application/json' 
    }); 

    var result = body.theArray.filter(stringFilter).sort(); 

    res.end(JSON.stringify(result)); 
    }); 
} 

require('http').createServer(requestHandler).listen(3000); 

여기있다, 이것은 단지, 몸을 구문 분석이 아닌 문자열을 필터링하고 나는 또한 sort()을 추가했습니다. 하지만,이 입력 (요청 본문)가 필요합니다 유효한 JSON 수 :

node app.js 

curl -H "Content-Type: application/json" -d '{"theArray": [[], "a", {}, "c", "B"]}' localhost:3000 

편집 :

당신은 (파일 app.js 이름을 경우) 이것을 테스트 할 수 있습니다. 질문의 데이터와 비슷하다면 해당 형식의 파서를 작성해야합니다. 누군가가 배열되도록

var arr = [[],"d","B",{},"b",12,"A","c"]; 

있었다 그리고

JSON.stringify({theArray: JSON.stringify(arr)});