0

私は node.js の初心者で、今は http.get から API の結果を取得しようとしています。しかし、コードを実行すると、次のエラーが表示されます。

Error: getaddrinfo ENOTFOUND
Error: getaddrinfo ENOTFOUND
at errnoException (dns.js:37:11)
at Object.onanswer [as oncomplete] (dns.js:124:16)

私は http を正しく要求しています (確実にテストしました)。問題を説明するための関数を次に示します。

function getData(apiUrl, getUrl) {

    var options = {
        host : apiUrl,
        port : 80,
        path : getUrl
    };

    var content = "";

    http.get(options, function(res) {
        console.log("Got response: " + res.statusCode);

        res.on("data", function(chunk) {

            content += chunk;
            console.log(content);

        });

    }).on('error', function(e) {
        console.log("Error: " + e.message); 
        console.log( e.stack );
    });

}

そして、次のように呼び出します。

getData('https://api.twitter.com', '/1/statuses/user_timeline.json?&screen_name=twitter&callback=?&count=1');

あなたが私を助けてくれることを願っています、ありがとう!

4

1 に答える 1

1

http モジュールの代わりに https を使用する必要があります。http://nodejs.org/api/https.htmlを参照し てください。オプション オブジェクトでは、「ホスト」は単にホスト名、つまり api.twitter.com にする必要があります。ポートの指定は不要ですが、httpsの場合「80」は誤りです。特に明記されていない限り、HTTPS は 443 です。

次のように正しいオプションを生成できます。

    parseURL = require('url').parseURL;
    parsedURL = parseURL(apiURL);
    var options = {
        hostname : parsedURL.hostname,
        path : getUrl
    };

効率を高めるために、parseURL 関数は getData 関数の外で定義するのが最適です。

getData 関数が http と https の両方の URL をサポートすることが重要な場合は、parsedURL.protocol を確認できます。「https」の場合は を使用https.getし、「http」の場合は を使用しますhttp.get

于 2013-03-24T01:14:17.360 に答える