Я создаю два 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, и переходите оттуда.