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

您必须使用 https 而不是 http 模块。参见http://nodejs.org/api/https.html 在选项对象中,“host”应该只是主机名,即 api.twitter.com。指定端口不是必须的,但在 https 的情况下“80”是错误的。除非另有明确说明,否则 HTTPS 为 443。

您可以生成正确的选项,如下所示:

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

为了提高效率,最好在 getData 函数之外定义 parseURL 函数。

如果您的 getData 函数同时支持 http 和 https url 很重要,您可以检查 parsedURL.protocol。如果“https”,则使用https.get,如果“http”,则使用http.get.

于 2013-03-24T01:14:17.360 回答