Как создать прокси в Nodejs - PullRequest
0 голосов
/ 10 мая 2018

Я хочу создать сервер nodejs, который выполняет функции прокси-сервера для загрузки файлов, то есть кликов пользователя на кнопке загрузки вызовите get с сервера nodejs, сервер nodejs получает ссылку с другого удаленный сервер и начинает загрузку (в терабайтах). Эта загрузка затем пересылается пользователю. Терабайтный файл не должен храниться на сервере nodejs, а затем отправляться.

Вот моя попытка:

function (request, response) {

 // anything related to the remote server having the file
 var options= {
        path: "./bigData",
        hostname:"www.hugeFiles.net"
    }

    // get the file from the remote server hugefiles and push to user's response
    https.get(options, function(downFile)) {
        downFile.pipe(response) 
    }

}

Прежде чем я использовал res.download(file, function(err)) {}, но файл должен быть полностью загружен с удаленного сервера

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Вы очень близки, вы отправляете правильное тело http, но с неправильными заголовками http.

Вот минимальный рабочий пример:

const express = require('express');
const http = require('http');

const app1 = express();

app1.get('/', function (req, res) {
  res.download('server.js');
});

app1.listen(8000);

const app2 = express();

app2.get('/', function (req, res) {
  http.get({ path: '/', hostname: 'localhost', port: 8000}, function (resp) {
    res.setHeader('content-disposition', resp.headers['content-disposition']);
    resp.pipe(res);
  });
});

app2.listen(9000);

Хотя я бы сказал, что выследует взглянуть на модули типа https://github.com/nodejitsu/node-http-proxy, которые заботятся о заголовке и т. д.,,для тебя.

0 голосов
/ 10 мая 2018

Ваш сервер не может предоставить файл клиенту без предварительной загрузки его сервером.

Вместо этого вы можете предоставить клиенту ссылку для скачивания огромного файла. Чтобы это выглядело автоматически, вы можете создать html, который автоматически запускает загрузку от поставщика контента и передает его клиенту.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...