node.js无法使用http进行休息调用

时间:2013-08-05 10:44:37

标签: node.js http rest

我是node.js的新手,我正在尝试发出http请求。我按照教程尝试调用random.org。这是我的app.js文件:

var http = require('http');

//The url we want is: 'www.random.org/integers/?num=1&min=1&max=10&col=1&base=10&format=plain&rnd=new'
var options = {
  host: 'www.random.org',
  path: '/integers/?num=1&min=1&max=10&col=1&base=10&format=plain&rnd=new'
};

callback = function(response) {
  var str = '';

  //another chunk of data has been recieved, so append it to `str`
  response.on('data', function (chunk) {
    str += chunk;
  });

  //the whole response has been recieved, so we just print it out here
  response.on('end', function () {
    console.log(str);
  });

  response.on('error', function () {
    console.log("err");
  });
}

http.request(options, callback).end();

所以,无论如何,使用

运行此文件时
node app.js

我在控制台收到以下错误:

C:\Program Files\nodejs>node app.js

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: connect ETIMEDOUT
    at errnoException (net.js:901:11)
    at Object.afterConnect [as oncomplete] (net.js:892:19)

2个问题:
1.为什么我有时间错误(网站有效 - 我检查过)
2.无论如何 - 为什么我没有抓住这个错误,因为我在响应中有一个错误监听器。

非常感谢任何可能的帮助!

由于

2 个答案:

答案 0 :(得分:4)

您正在将错误侦听器附加到响应,但是请求本身会发生错误。做这样的事情:

http.request(options, callback)
.on('error', function () {
    console.log("err in request");
})
.end();

错误表示网站可用,否则错误会显示EHOSTUNREACHETIMEDOUT表示请求的响应速度不够快。它需要一些调查,lke是网络关闭,尝试获取www.google.com。它正考虑的超时值是多少?等

答案 1 :(得分:0)

行。我尝试将此作为独立节点js进程运行,而不使用浏览器作为后台。 不建议这样做,并且在上面指定的情况下,问题是这个无头请求缺少cookie。

如果我将所有内容都包装在createServer方法中,并且根据请求我会使用相同的参数来执行http.request +来自服务器请求的cookie - 这可行。