2016-05-05 14 views
2

私はendのjsonを解析していますが、まだこのエラーが発生しています。予期せぬJSON入力の終了

'use strict'; 
const http = require('http'); 
const tools = require('./tools.js'); 

const server = http.createServer(function(request, response) { 
    console.log("received " + request.method + " request from " + request.headers.referer) 

    var body = ""; 
    request.on('error', function(err) { 
     console.log(err); 
    }).on('data', function(chunk) { 
     body += chunk; 
    }).on('end', function() { 
     console.log("body " + body); 
     var data = JSON.parse(body); // trying to parse the json 
     handleData(data); 
    }); 

    tools.setHeaders(response); 
    response.write('message for me'); 
    response.end(); 
}); 
server.listen(8569, "192.168.0.14"); 

console.log('Server running at 192.168.0.14 on port ' + 8569); 

データがクライアントから送信されている:

var data = JSON.stringify({ 
    operation: "shutdown", 
    timeout: 120 
}); 

私は正常にJSONを受けるが、私はそれを解析することができません。

更新:

私は全体的にサーバーコードが含まれるように、コードを更新しました。

.... 
}).on('end', function() { 
    console.log("body " + body); 
    //var json = JSON.parse(body); // trying to parse the json 
    //handleData(json); 
}); 

この

を生成します。これは、しかし

description

:私はこれを取得

.... 
}).on('end', function() { 
     console.log("body " + body); 
     var json = JSON.parse(body); // trying to parse the json 
     handleData(json); 
}); 

は、次のコードを使用して、完全に透明であるために

description

+0

'JSON.parse'はする必要があります文字列を受け付けます有効なJSON。取得しているエラーは、解析対象が有効なJSONではないことを意味します。文字列化された 'data'変数を使用して' JSON.parse'に渡すと、すべて正常に動作します。 – nem035

+0

私はいくつかのことを試していました。私の質問を更新しました – Shaffanhoon

+1

'body.'が実際に期待していることを確認するために' JSON.parse'を呼び出す前に 'console.log(body);'を追加してみてください。 – Paulpro

答えて

0

これはクロスオリジン(cors)リクエストであるため、プリフライトされたリクエストで送信されたデータを解析しようとしていました。

私は単にあなたが興味があるならさらに読んで、この

....  
}).on('end', function() { 
    if (request.method !== 'OPTIONS') { 
     var data = JSON.parse(body); 
     handleData(data); 
    } 
}); 

success

をキャッチするifを追加する必要がありました:HTTP access control (CORS)

-1

識別子を引用符で囲みます。

{ 
    "operation": "shutdown", 
    "timeout": 120 
} 

http://jsonlint.com/有用なリソースです。

+1

これはJSON.stringifyの仕事です。 – theharls

1

サーバーコードを確認できますか?

ここには、あなたが試みている(多かれ少なかれ)実用的なエンドツーエンドの例があります。

"use strict"; 
const http = require('http'); 

/******************** 
    Server Code 
********************/ 
let data = { 
    operation: 'shutdown', 
    timeout: 120 
}; 
const server = http.createServer((req, res) => { 
    res.writeHead(200, { 'Content-Type': 'application/json' }); 
    res.write(JSON.stringify(data)); 
    res.end(); 
}); 
server.listen(8888); 

/******************** 
    Client Code 
********************/ 
let options = { 
    hostname: 'localhost', 
    port: 8888, 
    path: '/', 
    method: 'POST', 
    headers: { 
     'Accept': 'application/json' 
    } 
}; 
let req = http.request(options, res => { 
    let buffer = ''; 
    res.on('data', chunk => { 
     buffer += chunk; 
    }); 
    res.on('end',() => { 
     let obj = JSON.parse(buffer); 
     console.log(obj); 
     // do whatever else with obj 
    }); 
}); 
req.on('error', err => { 
    console.error('Error with request:', err); 
}); 
req.end(); // send the request. 
関連する問題