Как делать внешние HTTP-запросы с помощью Node.js [закрыто]

84

Вопрос довольно простой. Я хочу использовать сервер Node.js в качестве прокси-сервера для регистрации, аутентификации и пересылки HTTP-запросов на внутренний HTTP-сервер (запросы PUT, GET и DELETE).

Какую библиотеку я должен использовать для этой цели? Боюсь, что не найду.

Пьер
источник

Ответы:

136

NodeJS поддерживает http.request как стандартный модуль: http://nodejs.org/docs/v0.4.11/api/http.html#http.request

var http = require('http');

var options = {
  host: 'example.com',
  port: 80,
  path: '/foo.html'
};

http.get(options, function(resp){
  resp.on('data', function(chunk){
    //do something with chunk
  });
}).on("error", function(e){
  console.log("Got error: " + e.message);
});
чови
источник
10
Я бы рекомендовал добавить resp.setEncoding('utf8');(или любую другую кодировку, которую вы используете) для получения данных в виде строк utf8. Если я правильно понял, в противном случае вы получите объекты Buffer, и у вас могут возникнуть проблемы с многобайтовыми символами, если многобайтовый символ разделен на два фрагмента. (Просто какое-то время отлаживал связанную проблему)
Touko
8
Я действительно начал использовать requestмодуль npm намного больше.
chovy
7

Я бы совмещал node-http-proxy и express .

node-http-proxy будет поддерживать прокси внутри вашего веб-сервера node.js через RoutingProxy(см. пример под названием « Запросы прокси на другом http-сервере» ).

Внутри вашей пользовательской логики сервера вы можете выполнять аутентификацию с помощью экспресс. См. Пример аутентификации здесь .

Объединение этих двух примеров должно дать вам то, что вы хотите.

Hross
источник
5

Вы можете использовать встроенный httpмодуль для создания файла http.request().

Однако, если вы хотите упростить API, вы можете использовать такой модуль, как суперагент

злой сельдерей
источник
3
Действительно, гораздо более разумный api. Я не виню узел за предоставление только низкоуровневого API, но начало обработки фрагментов данных просто раздражает.
Laurent Bourgault-Roy
1

node-http-proxy - отличное решение, как было предложено @hross выше. Если вы не зациклились на использовании node, мы используем NGINX, чтобы сделать то же самое. Это действительно хорошо работает с node. Мы используем его, например, для обработки SSL-запросов перед их пересылкой на узел. Он также может обрабатывать кеширование и пересылку маршрутов. Ура!

Джамунд Фергюсон
источник
0

Для этого вы можете использовать http-модуль node.js. Вы можете проверить документацию на Node.js HTTP .

Вам также необходимо передать строку запроса на другой HTTP-сервер. У вас должно быть это в ServerRequest.url .

Получив эту информацию, вы можете передать внутренний HTTP-сервер и порт в параметрах, которые вы предоставите в http.request()

Момо
источник