Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.10.2023, 17:23
Кандидат Javascript-наук
Отправить личное сообщение для Raadsert Посмотреть профиль Найти все сообщения от Raadsert
 
Регистрация: 09.12.2021
Сообщений: 102

Отправленная через POST FormData
Здравствуйте.

Изначально столкнулся с проблемой когда данные в FormData нужно отправить на сервер с клиента через Fetch, а уже с сервера отправить дальше, на другой сервер (тоже в качестве FormData).

Оказалось что если попробовать отправить их с сервера обратно(через response), ответ будет пуст. Далее нашёл информацию о том что на стороне сервера эти данные не видно и нужно, при помощи multer или multipart, их расшифровать.

Подскажите, я правильно понимаю? Чтоб дальше использовать присланные данные в FormData, обрабатывать их или отправлять на другой сервер, их нужно расшифровать? А если нужно просто отправить данные на другой сервер как FormData, то их нужно расшифровать и запаковать снова?
Ответить с цитированием
  #2 (permalink)  
Старый 04.10.2023, 18:55
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

It depends...

В самом простом случае для которого ты всегда легко найдёшь инструменты и мануалы - да, придётся распаковать и запаковать снова.

Если очень хочется - никто тебе не помешает отредактировать сырой HTTP запрос и переотправить его, не трогая нагрузку, однако это уже низкоуровневые манипуляции которые тебе придётся писать самому, разбираясь в деталях.

Возможно тебе вообще ничего не нужно менять в запросе? Тогда тебе проще будет воспользоваться просто проксированием запроса, вообще не трогая руками содержимое. Готовых и доступных решений для проксирования тоже множество.
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 05.10.2023, 18:46
Кандидат Javascript-наук
Отправить личное сообщение для Raadsert Посмотреть профиль Найти все сообщения от Raadsert
 
Регистрация: 09.12.2021
Сообщений: 102

Сообщение от Aetae Посмотреть сообщение
It depends...

В самом простом случае для которого ты всегда легко найдёшь инструменты и мануалы - да, придётся распаковать и запаковать снова.

Если очень хочется - никто тебе не помешает отредактировать сырой HTTP запрос и переотправить его, не трогая нагрузку, однако это уже низкоуровневые манипуляции которые тебе придётся писать самому, разбираясь в деталях.

Возможно тебе вообще ничего не нужно менять в запросе? Тогда тебе проще будет воспользоваться просто проксированием запроса, вообще не трогая руками содержимое. Готовых и доступных решений для проксирования тоже множество.
Помогите пожалуйста. Как вы и посоветовали пробую отправлять запрос через прокси "express-http-proxy", если делать обычные запросы POST/GET без FormData всё замечательно работает, но как только добавляю FormData сразу возвращает ошибку со статусом 500, а если добавить в форму ещё и файл, то вернёт net::ERR_CONNECTION_ABORTED.

Клиент:
const data = {};
const formData = new FormData();

Array.from(createPostForm.elements)
  .forEach(({ name, type, value, files, ...element }) => {
    if (!['submit', 'file'].includes(type)) {
      data[name] = value;
    } else if (type === 'file') {
      Array.from(files).forEach((file) => {
        formData.append(`files.${name}`, file, file.name);
      });
    }
});

formData.append('data', JSON.stringify(data));

// Адрес который принимает запрос после прокси [url]http://test.ru:1337/api/post[/url]
fetch('http://test.ru/example/api/post', {
        method: 'POST',
        body: formData
    })
      .then(response => response.json() )
      .then(data => {
          console.log(data);
      })
      .catch(error => {
          console.log(error);
      });


Сервер:
router.use('/example', proxy('http://test.ru:1337')
Ответить с цитированием
  #4 (permalink)  
Старый 05.10.2023, 23:46
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

express-http-proxy не умеет нормально в multipart, лол.
Это гуглится по второй ссылке при запросе "express-http-proxy formdata".
А по первой ссылке решение: https://stackoverflow.com/a/76101464
__________________
29375, 35
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вывести через JS данные lmi2002 AJAX и COMET 4 29.05.2017 13:39
Обработка formData через Post Alexey04 Node.JS 5 11.12.2016 07:27
можно ли доверять е-майлу, предоставляемому через api соц-сетей? winch Общие вопросы Javascript 3 11.11.2016 11:05
Как обновить страницу открытую через post Роберт Общие вопросы Javascript 1 05.11.2008 14:53
XMLHTTPRequest передача имя через POST dds AJAX и COMET 0 14.08.2008 14:44