web-dev-qa-db-ja.com

Node.jsでの予期しないJSON入力の終了

Node.jsサーバーに投稿データとして受け取るJsonデータがあります。

しかし問題は、送信した文字列を解析できないことです。これが私のnode.jsサーバーコードです。

res.header("Access-Control-Allow-Origin", "*");
  req.on('data',function(data)
  {
    var done=false;
    console.log(data);
    var schema;

    schema=JSON.parse(data);
   }

ここで、json data(data)を解析するとエラーが発生します。

undefined:776



SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)
    at IncomingMessage.<anonymous> (/Users/as6/Documents/test/server.js:206:17)
    at emitOne (events.js:115:13)
    at IncomingMessage.emit (events.js:210:7)
    at IncomingMessage.Readable.read (_stream_readable.js:462:10)
    at flow (_stream_readable.js:833:34)
    at resume_ (_stream_readable.js:815:3)
    at _combinedTickCallback (internal/process/next_tick.js:102:11)
    at process._tickCallback (internal/process/next_tick.js:161:9)

JSONLintを使用して構文エラーのJSONデータを検証しましたが、問題はありませんでした。何が悪いのか、どうすれば修正できるのかわかりません。

5
Akash Sateesh

dataイベントはmultiple回発生する可能性があるため、すべてのdata値を収集して、それらを連結する必要があります。 endイベントが発生します:

let chunks = [];

req.on('data', function(data) {
  chunks.Push(data);
}).on('end', function() {
  let data   = Buffer.concat(chunks);
  let schema = JSON.parse(data);
  ...
});

ただし、おそらく body-parser

18
robertklep

行を変更してください

schema = JSON.parse(data);

schema = JSON.parse(JSON.stringify(data));
4
Owais Ibrahim