2016-02-18 4 views
5

私は、HerokuインスタンスにデプロイされているExpress/Nodeアプリケーションを持っています。このアプリケーションには、.jsonファイルが必要なPOST APIエンドポイントがあり、データを読み取り、アプリケーションにJSONデータを取り込みます。以下はPOSTリクエストを処理するバックエンドのコードは次のとおりです。予期しない入力の終わり - curl JSON on Express/Node App

router.route('/data') 
    .post(function (req, res) { 
    return DataUtils.storeData(req, res); 
    }); 

Utils.storeData = function (req, res) { 
    req.pipe(req.busboy); 
    req.busboy.on('file', function (fieldname, file, filename) { 
    file.on('data', function(data) { 
     var data; 
     try { 
     data = JSON.parse('' + data); // quick casting into a String 
     var numPersonSessionObj = data.length; 
     ... 
     // etc etc... 

我々は以下のcurlコマンドを介して要求を作ってみる:

カール-H "のContent-Length:5567" は、-Fファイルを http://[heroku-instance]/api/data

[email protected]_data/sample_json.jsonサーバが時々正常に動作し、データをアップロードし、他の回、「予期しないエンド入力の」エラーがスローされます。何らかの理由で、使用しているバッファメソッドがすべてのデータを読み取っていないようです。上記のコード(つまりJSON)にdata.lengthを記録すると、データの長さが想定よりも小さい場合は常にリクエストが失敗したように見えます。上記のJSONファイルを読んでいるところに何か問題がありますか? Thanks--

答えて

4

dataイベントは一部データを受信したことを示している - ではない全てデータが受信されたこと。 JSONを解析する前に、endイベントを待つ必要があります。詳細については、公式ドキュメントの次の例を参照してください。https://nodejs.org/api/stream.html#stream_api_for_stream_consumers

1

Content-Lengthは応答本体のオクテットの数でなければなりません。

あなたではなく、あなたの答えに、さらに手の込んだしてくださいすることができ

Buffer.byteLength(data) 
+0

より

data.length 

の値を使用してみたら?あなたはコード行を提供していますが、なぜこれが質問に答えるかについては説明がありません。ありがとうございました。 –

関連する問題