我的网站在Node上运行并使用Express框架。
我的目标是从Yahoo Placefinder api收集数据。它不支持JSONP,所以我需要将我的JQuery.getJSON请求发送到我自己的代理。然后我的代理会向Placefinder api发送一个http请求,并回复响应。
如果我使用的是php而不是Node,我只会创建一个新的php文件,其中包含对placefinder api的curl请求并回显响应。
但是,我正在使用Node,我不知道从哪里开始。
而且,我正在使用Express框架。
我的问题是:
代理在Express框架中适合哪里?公用文件夹?
我在哪里可以找到有关如何在Node中编码代理的一些信息?
我是否需要修改Rackspace云(ubuntu)服务器的配置才能实现此目的?
答案 0 :(得分:13)
请参阅node-http-proxy。它应该比实现自己的代理更好。
Express允许您在执行express.createServer()
时添加中间件作为参数。或者,您可以稍后使用.use(proxy)
添加它们。
我不这么认为。
举一个例子(未经测试的代码):
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