Как добавить прокси на сайт Node / Express? - PullRequest
3 голосов
/ 08 июля 2011

Мой сайт работает на Node и использует платформу Express.

Моя цель - собрать данные из API Yahoo Placefinder.Он не поддерживает JSONP, поэтому мне нужно отправить мой запрос JQuery.getJSON на мой собственный прокси.Мой прокси-сервер затем отправлял бы http-запрос в API Placefinder и выводил ответ.

Если бы я использовал php вместо Node, я бы просто сделал новый php-файл, который включает в себя запрос curl для API-интерфейса Placefinder.и повторить ответ.

Но я использую Node, и я не уверен, с чего начать.

И я использую платформу Express.

MyВопросы:

  1. Где прокси будет вписываться в платформу Express?Общая папка?

  2. Где я могу найти информацию о том, как кодировать прокси в Node?

  3. Нужно ли будет изменять конфигурациюмоего сервера Rackspace cloud (ubuntu), чтобы это было возможно?

Ответы [ 5 ]

13 голосов
/ 08 июля 2011

См. 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);
});

...
4 голосов
/ 30 марта 2014

Вот еще один пример с 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 );
1 голос
/ 08 июля 2011

Вы можете просто добавить другой маршрут к вашему экспресс-приложению, возможно, по адресу /api/yahoo/....

Эта функция просмотра затем вызовет API Yahoo, возможно, используя: http://nodejs.org/docs/v0.4.9/api/http.html#http.request,когда этот запрос завершается, вы просто возвращаете результат в формате JSON.

Однако имейте в виду, что ваш прокси-сервер общедоступен и что любой может отправлять запросы через него.Я хотел бы предложить некоторые основные разрешения.Сгенерированное значение, которое вы предоставляете странице, выполняющей запрос, должно работать.

0 голосов
/ 26 августа 2014

В настоящее время это, кажется, самое простое решение для добавления прокси в Express: https://www.npmjs.org/package/proxy-middleware

0 голосов
/ 07 марта 2014

Использование 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' });
});
...