1

我在 node.js 中编写了以下代码来访问 Twitter 流 API。如果我curl使用下面的 URL,它可以工作。但是,我无法让它与我的代码一起使用。

var https = require('https');

https.request('https://USERNAME:PASSWORD@stream.twitter.com/1.1/statuses/sample.json', function(res) {
  res.on('data', function(chunk) {
    var d = JSON.parse(chunk);
    console.log(d);
  });
});

但我收到以下

node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: connect EADDRNOTAVAIL
    at errnoException (net.js:642:11)
    at connect (net.js:525:18)
    at Socket.connect (net.js:589:5)
    at Object.<anonymous> (net.js:77:12)
    at new ClientRequest (http.js:1073:25)
    at Object.request (https.js:80:10)
    at Object.<anonymous> (/Users/jordan/Projects/twitter-stream/app.js:3:7)
    at Module._compile (module.js:441:26)
    at Object..js (module.js:459:10)
    at Module.load (module.js:348:31)

如果有人可以提供替代解决方案,或者向我解释为什么这不起作用,我将非常感激。

4

5 回答 5

4

我最近遇到了同样的问题。这是解决方案

 var https = require('https');   
 var options = {   
   host : 'stream.twitter.com',   
   path : '/1.1/statuses/filter.json?track=bob',    
   method : 'GET',  
   headers : {   
   "Authorization": "Basic "+new Buffer("userName:passwd").toString("base64")
  }   
 };
 var request = https.request(options,function(response){   
   var body = '';
   response.on("data",function(chunk){    
    var tweet = JSON.parse(chunk);  
    console.log(tweet.text);  
  });  
 });  
 request.end();
于 2012-11-13T10:49:08.810 回答
0

1)正如 ebohlman 已经说过的那样,https.request 将选项对象作为第一个参数。

http://nodejs.org/api/https.html#https_https_request_options_callback

2)您的 JSON.parse 很可能会失败,因为“数据”事件将在每个块上发出,并且响应可能跨越更多块,因此请等到响应结束。

var data = ""
res.on('data',function(chunk){
   data+=chunk
})
res.on('end',function(){
  try  {
     var parsed = JSON.parse(data)
  } catch(e) {
     console.log('failed to parse...',e)
  }
})
于 2012-09-09T17:28:02.963 回答
0

https.request()想要一个选项对象作为它的第一个参数,而不是字符串 URL。但是,您最好使用 mikeal 的请求库,它确实采用字符串 URL。

于 2012-09-09T03:35:32.403 回答
0

jst尝试通过其ID杀死进程节点killall nodeps -aux|grep node通过其ID杀死进程。然后它将起作用。是的,如果您在Linux上运行。

于 2012-11-13T13:35:15.437 回答
0

我遇到了同样的问题,问题是我使用的是旧版本的 Nodejs(v0.6.19),在该版本中,http.get需要第一个参数作为至少具有主机和路径属性的选项对象。在较新的版本中,您可以简单地给出 url 字符串。

http.get({host:'www.google.com',path:'/index.html'}, function(res) {
  console.log("Got response: " + res.statusCode);
}).on('error', function(e) {
  console.log("Got error: " + e.message);
});
于 2013-01-03T00:10:44.100 回答