2012-08-09 74 views
-1

我一直在尋找幾天的答案,並且似乎沒有任何工作。我有點新node.js,我只在服務器端從客戶端回答POST。這有點像我必須做的任務。我需要做的是,當客戶端腳本,我沒有寫,使用參數theArray位置'/ sort'POST請求,我需要排序數組,刪除所有非字符串值,並返回結果值爲JSON 。客戶端腳本將發送字符串化的JSON數組中的Array參數。所以像這樣的東西在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) ... 

是否有人可以幫助我,如果你能告訴我一些代碼,以幫助。由於

回答

1

需要根據傳送編碼解碼POST數據(我相信這是application/x-www-form-urlencoded你的情況)

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

在您的文章的形式使用實際名稱替換formParamName。這裏是querystring module documentation

+0

有什麼辦法,你可以給我怎麼做,請 – Chad 2012-08-09 04:38:00

+0

我添加答案的例子示例 – 2012-08-09 05:11:49

+0

我在JSON.parse之前的地方有過qs.parse,但它返回的是相同的東西。基本上我改變它的原因是因爲我認爲qs.parse的需求就像key1 = value1&key2 = value2。而我把它放在裏面就像是「theArray」:「[[],\」d \「,\」B \「,{},\」b \「,12,\」A \「,\」c \「]」 – Chad 2012-08-09 05:19:40

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); 

我已經離開了URL處理,這僅僅是用於解析身體,過濾掉非字符串,我還添加了sort()

node app.js 

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

編輯:

你可以用(如果您命名的文件app.js)測試該這需要輸入(請求體)是有效的JSON,雖然。如果它看起來像問題中的數據,那麼您將不得不爲該格式編寫解析器。對我來說,它看起來像有人想了個陣列,使得

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

,然後做

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