Как я могу обслуживать некоторые URL-адреса из express.js, отправляя запросы в другое веб-приложение? - PullRequest
0 голосов
/ 19 августа 2011

Я написал некоторый код с использованием express.js, который я хотел бы поместить в тот же порт HTTP, что и веб-приложение, реализованное с другой технологией (в данном случае, Django).Я не хочу перенаправлять браузеры пользователей на другой порт, так как в этом случае они могут добавить URL-адреса в закладки для другого порта, а затем я потеряю возможность перенастроить схемы позже.Итак, я бы хотел, чтобы express.js обслуживал HTTP на своем порту, выполняя некоторые пути, которые я определяю, отправляя HTTP-запросы вторичному веб-приложению, которое обслуживается на другом порту.

Существует ли какое-либо промежуточное программное обеспечение или другой метод для express.js, который будет обслуживать определенные пути, отправляя HTTP-запросы на другие серверы?

( Вопрос stackoverflowExpressjs? имеет отношение, но обсуждает только GET, и у меня будет несколько запросов POST для пересылки.)

Ответы [ 2 ]

2 голосов
/ 19 августа 2011

Хотя можно сделать POST-запрос с узлом, я думаю, что описываемый вами шаблон лучше подходит для использования сервера типа nginx или apache перед обоими node.js и django, а также для прокси-запросов к какому порту подходит на основании запроса.

Как правило, и django, и node.js прослушивают те порты, которые вы хотите прослушивать, в то время как nginx прослушивает порт 80. Затем вы определяете виртуальный хост в nginx, который пересылает определенные запросы в node.js и определенные запросы Джанго.

Здесь - документы nginx по использованию proxy_pass.

Вот пример, модифицированный из nginx Полный пример :

  server { # simple reverse-proxy
    listen       80;
    server_name  domain2.com www.domain2.com;

    # serve static files
    location ~ ^/(images|javascript|js|css|flash|media|static)/  {
      root    /var/www/virtual/big.server.com/htdocs;
    }

    # pass requests for dynamic content to django
    location /djangostuff {
      proxy_pass      http://127.0.0.1:8080;
    }

    # pass requests for node
    location /nodestuff {
      proxy_pass      http://127.0.0.1:8081;
    }

  }
1 голос
/ 20 августа 2011

С node-http-proxy требуется только один вызов app.use для обратного прокси-обработки всех необработанных запросов, например:

var app = express.createServer();
# my app.get bindings
app.use(require('http-proxy').createServer(80, 'other-server-address'));
app.listen(80);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...