2017-08-04 8 views
0

現在、WebAPIを読み取るためのコードを書いています。WebAPIを呼び出そうとしたときにNode.jsの「Undefined:1」エラーが発生しました

C:\ Users \ユーザーXXXX \ XXXX \ XXXX>ノードbot.js 未定義:1

にSyntaxError:JSON入力の予期しない終わり

at Object.parse (native) 

at IncomingMessage.<anonymous> (C:\Users\XXXX\XXXX\XXXX\bot.js:82:20) 

at emitNone (events.js:91:20) 

at IncomingMessage.emit (events.js:185:7) 

at endReadableNT (_stream_readable.js:974:12) 

at _combinedTickCallback (internal/process/next_tick.js:80:11) 

at process._tickCallback (internal/process/next_tick.js:104:9) 

ここでは私のコードは

var http = require('http'); 

var options = { 
    host: 'backpack.tf', 
    port: 80, 
    path: '/api/IGetPrices/v4?key="personalapikey"', 
    method: 'GET' 
}; 

http.request(options, function(res){ 
    var body = ''; 

    res.on('data', function(chunk){ 
     body+=chunk; 
    }); 

    res.on('end', function(){ 
     var price = JSON.parse(body); 
     console.log(price); 
    }); 
}).end(); 
です

私はnode.jsと一般的なコーディングではとても新しいです。しかし、私はこれを動作させるために他の3つの方法を試みました。私はアイデアがありません

+0

コードをフォーマットしてください。本当に読みにくいです。 – alexmac

+0

とにかく 'res.on( 'end''コールバックの' body'は無効ですjson。 – alexmac

+0

私は再フォーマットされました、それは何を意味するのでしょうか? – Ryder

答えて

0

あなたのコードに次のものを追加して、より頑強でエラーを起こさないようにしたり、応答コードをチェックしたり、ボディが空でないかチェックしたり、それが有効なJSONであることを確認し、APIが無効なJSONで応答する場合はtryキャッチで本文を解析します。

var http = require('http'); 

var options = { 
    host: 'backpack.tf', 
    port: 80, 
    path: '/api/IGetPrices/v4?key="personalapikey"', 
    method: 'GET' 
}; 

http.request(options, function(res){ 
    var body = ''; 

    res.on('data', function(chunk){ 
     body+=chunk; 
    }); 

    res.on('end', function(){ 
     if (res.statusCode == 200) { // Check the status code returned in the response 
      try { // Add try catch block to handle corrupted json in response 
       if (body != '') { // Check that the body isn't empty 
        console.log(body); // Print the body to check if it's actually a valid JSON 
        var price = JSON.parse(body); 
        console.log(price); 
       } else { 
        console.log('Body is empty'); 
       } 
      } catch (err) { 
       console.log(err); 
      } 
     } else { 
      console.log('Status code: ' + res.statusCode); 
     } 
    }); 
}).end(); 
+0

エラーが修正されました!出力は '301'として出力されます – Ryder

+0

フォローアップの質問として、Infoからapiの新しい.json ? – Ryder

+0

js intにパースする場合は、 'var price = parseInt(body);'と書くことができます。 'var obj = {price:parseInt(body)} 'と書くことができます。 ; ' –

関連する問題