如何将代理添加到Node / Express站点?

时间:2011-07-08 15:19:10

标签: json node.js proxy jsonp express

我的网站在Node上运行并使用Express框架。

我的目标是从Yahoo Placefinder api收集数据。它不支持JSONP,所以我需要将我的JQuery.getJSON请求发送到我自己的代理。然后我的代理会向Placefinder api发送一个http请求,并回复响应。

如果我使用的是php而不是Node,我只会创建一个新的php文件,其中包含对placefinder api的curl请求并回显响应。

但是,我正在使用Node,我不知道从哪里开始。

而且,我正在使用Express框架。

我的问题是:

  1. 代理在Express框架中适合哪里?公用文件夹?

  2. 我在哪里可以找到有关如何在Node中编码代理的一些信息?

  3. 我是否需要修改Rackspace云(ubuntu)服务器的配置才能实现此目的?

5 个答案:

答案 0 :(得分:13)

  1. 请参阅node-http-proxy。它应该比实现自己的代理更好。

  2. Express允许您在执行express.createServer()时添加中间件作为参数。或者,您可以稍后使用.use(proxy)添加它们。

  3. 我不这么认为。

  4. 举一个例子(未经测试的代码):

    var httpProxy = require('http-proxy'), express = require('express');
    var yahooProxy = httpProxy.createServer(80, 'yahoo.com');
    var app = express.createServer();
    app.configure(function () {
        app.use('/yahoo', yahooProxy);
    });
    
    ...
    

答案 1 :(得分:4)

这是另一个1.0.X的示例,它演示了标头注入。

var express = require( 'express' );
var proxy   = require( 'http-proxy' ).createProxyServer;
var app     = express();

app.configure(function() {

  // Inject some request headers here before we proxy...
  app.use( function( req, res, next ) {
    req.headers[ 'x-my-header' ] = 'blah blah';
    next();
  });

  // Proxy based on path...
  app.use( '/stack', proxy({ target: 'http://stackoverflow.com'} ).web );
  app.use( '/yahoo', proxy({ target: 'http://yahoo.com'} ).web );

  app.use( function( req, res ) {
    res.send({ ok: false, message: 'Not much here.' })
  });

}).listen( 3000 );

答案 2 :(得分:1)

您可以添加另一条路线到您的快递应用,也许是/api/yahoo/...

此视图函数将调用Yahoo API,可能使用:http://nodejs.org/docs/v0.4.9/api/http.html#http.request,然后当该请求完成时,您只需将结果返回为JSON。

但是,请记住,您的代理是公开的,任何人都可以通过它发出请求。我建议一些基本的授权。您提供给发出请求的页面的生成值应该有效。

答案 3 :(得分:0)

使用带快递的http-proxy 1.0:

var httpProxy = require('http-proxy');

var apiProxy = httProxy.createProxyServer();

app.get("/api/*", function(req, res){ 
  apiProxy.web(req, res, { target: 'http://google.com:80' });
});

答案 4 :(得分:0)

现在这似乎是向Express添加代理的最简单的解决方案: https://www.npmjs.org/package/proxy-middleware