3

私は次のルートを持っています:

exports.index = function(req, res){
  res.render('index', { title: 'Express' });
};

次のWebサービスを呼び出します:http://ergast.com/api/f1/current/last/resultsそしてJSONを返すように指示します。

インデックスリクエストでこのようなことを試しましたが、エラーが発生します。

var options = {
  host: 'ergast.com',
  port: 80,
  path:'/api/f1/current/last/results.json'
};

http.get(options, function(response) {
  response.setEncoding('utf-8');
  console.log("Got response: " + response.statusCode);
  var data = JSON.parse(response);
}).on('error', function(e) {
  console.log("Got error: " + e.message);
}).on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });

おそらくどこかで要点を見逃していると思います。

ありがとう

4

2 に答える 2

6

これは単純なはずです:)リクエストモジュール(npmインストールリクエスト、または単にpackages.jsonファイルに追加する)を使用することをお勧めします。

次に、次のことを実行できます。

var request = require("request");
request.get("http://ergast.com/api/f1/current/last/results.json", function (err, res, body) {
    if (!err) {
        var resultsObj = JSON.parse(body);
        //Just an example of how to access properties:
        console.log(resultsObj.MRData);
    }
});

JSON APIをそのまま使用するのではなく、JSONPを使用することについての提案があります。

JSONPが存在する理由は、ブラウザー上のクロスドメインAPIのためです。これをサーバーで実行しているため、クロスドメインの制限は問題にならず、JSONPは必要ありません。とにかくあなたが望むように進んでください!

編集:なぜあなたがこれを試さないのかわかりません。エラー管理用の場合は、エラー管理を使用してコードを更新しました。

于 2012-10-03T20:45:50.730 に答える
1

指定した最初の引数がhttp.get正しくありません。この関数については、 node.jsのドキュメントを参照してください。渡す代わりにoptions、完全なURLを文字列として渡すだけです。

http.get('http://ergast.com/api/f1/current/last/results', function(res) {
...

編集:編集後options、引数は正しくありません。オプションディクショナリを使用する場合は、次のように指定します。

{ host: 'ergast.com', port: 80, path: '/api/f1/current/last/results' }
于 2012-10-03T20:46:14.483 に答える