Node.js从节点服务器连接到远程服务器

时间:2012-03-01 15:57:36

标签: node.js

我有一个小的Node.js应用程序,我想点一个远程API来获取一些日期(即twitter,microsoft的翻译服务,天气)。从docs for Node's http我尝试将示例代码放入我的节点服务器应用程序中:

var options = {
  host: 'www.google.com',
  port: 80,
  path: '/index.html'
};

http.get(options, function(res) {
  console.log("Got response: " + res.statusCode);
}).on('error', function(e) {
  console.log("Got error: " + e.message);
});

我已尝试使用来自文档的google网址,推特API网址和其他几个网址,但我能得到的唯一回应是:

Got error: connect ECONNREFUSED

使用与wget相同的网址会让人满意,因此我知道网址有效。为了从我的应用服务器到远程服务成功连接,我需要更改什么?

或者

关于我如何调试它的一些帮助会更好。那么我只能从失败中得到的信息是ECONNREFUSED。我尝试使用socket.io将错误响应转发到浏览器(在.on('error', function(e){...}内),以便我可以使用webkit进行检查。不幸的是,错误对象只包含:

Object
    error: Object
        code: "ECONNREFUSED"
        errno: "ECONNREFUSED"
        syscall: "connect"
    __proto__: Object
__proto__: Object

确定出错的方法并没有多大帮助。


作为参考,我的整个app.js是:

var express = require('express') , http = require('http') , routes = require('./routes');

var app = module.exports = express.createServer();
var io = require('socket.io').listen(app)

app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'ejs');
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
  app.use(express.errorHandler());
});

app.get('/', function(req, res){
  routes.index(req, res);
  console.log(req.query);

  var options = {
    host: 'www.google.com',
    port: 80,
    path: '/index.html'
  };

  http.get(options, function(res) {
    console.log("Got response: " + res.statusCode);
  }).on('error', function(e) {
    console.log("Got error: " + e.message);
  });
});

app.listen(4000);
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);

1 个答案:

答案 0 :(得分:4)

  

我:“您是否确定通过为您的互联网连接设置的代理发送请求?”

     我是:“没有”

     

我:“那样做”

     

我:“好的,现在可以了”

  var options = {
    host: '<proxyip>',
    port: <proxyport>,
    path: 'http://www.google.com/index.html'
  };

  http.get(options, function(res) {
    console.log("Got response: " + res.statusCode);
  }).on('error', function(e) {
    console.log("Got error: " + e.message);
  });