NodeJs с Express не анализирует данные формы из node-fetch

Я создаю два API с помощью NodeJS, Express и TypeScript. Один API примет запрос с типом содержимого multipart/form-data и будет использовать тело запроса для выполнения другого запроса ко второму API.

Я использую Postman, поэтому цепочка запросов выглядит примерно так

Postman -> First API -> Second API

Я использую node-fetch, чтобы сделать запрос от первого API ко второму. Тело запроса - это FormData, который содержит некоторые файлы и пары "ключ-значение".

    const form = new FormData();
    
    // File for profile picture
    const profilePictureBuffer = await (await fetch(user.profilePicture)).buffer();
    form.append('profilePicture', profilePictureBuffer);

    // File for ID Card
    const idCardBuffer = await (await fetch(user.idCardUrl)).buffer();
    form.append('idCard', idCardBuffer);


    // This part iterats over the obsect of 'user',
    // which contains other key-value pairs
    Object.entries(user).forEach((data) => {
        form.append(data[0], data[1]);
    });

    // Make POST request to second API
    const pinterUser = await fetch(secondAPIURL, {
        method: 'post',
        body: form,
        headers: form.getHeaders()
    });

Я запустил оба API на localhost, чтобы отслеживать журналы на наличие ошибок. Когда я делаю запрос от Postman к первому API, а затем первый API делает другой запрос ко второму API, я получил следующий журнал ошибок в терминале для второго API

TypeError: Cannot read property '0' of undefined

После некоторого расследования Я обнаружил, что во втором API req.body и req.files являются пустыми объектами.. Это означает, что Express не проанализировал входящий запрос. Обратите внимание, что у меня уже есть промежуточное ПО multer для обработки файлов в запросе.

Кроме того, я добавил следующие строки кода в свой файл server.ts для второго API.

/** Parse the body of the request */
router.use(express.urlencoded({ extended: true }));
router.use(express.json());

Однако, когда я попытался сделать запрос от почтальона, он вернул успешный ответ.

Я не совсем уверен, что здесь происходит. Я попытался найти ответ по этой аналогичной проблеме, но большинство из них предлагают добавить urlencoded и json или использовать какую-либо другую библиотеку для обработки данных синтаксического анализа.

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

Интересно, мог ли кто-нибудь указать, что мне здесь не хватало? заранее спасибо

На первый взгляд все в порядке. Попробуйте использовать инструменты сетевой отладки, такие как wirehark (при работе с обычным HTTP), или укажите клиенту в первом API на прослушивающем экземпляре netcat, который будет печатать все, что получает по TCP. Посмотрите, что на самом деле первый API отправляет второму API, и переходите оттуда.

Robert Kawecki 31.03.2021 01:52
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
16
0

Другие вопросы по теме