【问题标题】:node.js cannot make rest call with httpnode.js 无法使用 http 进行休息调用
【发布时间】:2013-08-11 15:59:48
【问题描述】:

我是 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. 无论如何 - 为什么我没有捕捉到这个错误,尽管我在响应中有一个错误监听器。

任何可能的帮助将不胜感激!

谢谢

【问题讨论】:

  • 该代码至少在节点 0.8 中工作。要捕获请求中的错误http.request().on('error'...) 可能会起作用。
  • 谢谢@AndreasHultgren!你解决了我一个问题——关于错误捕获。关于版本 - 我使用的是 0.10.13。这很重要吗?
  • 既然请求已发送,请不要认为这很重要。试试下面@user568109 的建议
  • 您是否尝试过对request 模块执行相同的请求?

标签: node.js http rest


【解决方案1】:

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

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

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

【讨论】:

  • 即使谷歌返回 ETIMEDOUT。我可以同时卷曲 google 和 random.org。 :(
  • curl 显示结果是否需要一些时间。在您的选项中添加timeout: 10000,(以毫秒为单位)并尝试请求。
【解决方案2】:

好的。我试图在没有浏览器作为背景的情况下将其作为独立的节点 js 进程运行。 不建议这样做,在上面指定的情况下,问题是这个无头请求缺少 cookie。

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

【讨论】:

    猜你喜欢
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 2013-03-15
    相关资源
    最近更新 更多