AWS S3 SDK — загрузка из конечной точки API Next.js в Vercel — ERR_HTTP_HEADERS_SENT

Я пытаюсь загрузить файл из конечной точки API Next.js, работающей на Vercel, с помощью пакета @aws-sdk/client-s3. Вот пример:

import { PutObjectCommand, S3Client } from "@aws-sdk/client-s3";
import type { NextApiRequest, NextApiResponse } from "next";

export default async function handler(req: NextApiRequest, res: NextApiResponse) {
  const s3Client = new S3Client({});

  const uploadCommand = new PutObjectCommand({
    Bucket: process.env.MY_S3_BUCKET,
    Key: "test/testUpload.json",
    Body: JSON.stringify({ message: "Hello World" }),
  });

  const response = await s3Client.send(uploadCommand);

  res.status(200).json(response);
}

Этот код будет отлично работать на моем локальном хосте и загружать файл, как и ожидалось, на s3. Однако, как только это развернуто в моей среде Vercel, я получаю следующую ошибку из пакета @aws-sdk.

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at new NodeError (node:internal/errors:399:5)
    at ClientRequest.setHeader (node:_http_outgoing:663:11)
    at mod.request (/var/task/___vc/__launcher.js:90:17)
    at /var/task/node_modules/@aws-sdk/node-http-handler/dist-cjs/node-http-handler.js:70:25
    at new Promise (<anonymous>)
    at NodeHttpHandler.handle (/var/task/node_modules/@aws-sdk/node-http-handler/dist-cjs/node-http-handler.js:49:16)
    at async /var/task/node_modules/@aws-sdk/middleware-serde/dist-cjs/deserializerMiddleware.js:5:26 {
  code: 'ERR_HTTP_HEADERS_SENT',
  '$metadata': { attempts: 1, totalRetryDelay: 0 }
}

Используя следующую версию пакета:

"@aws-sdk/client-s3": "3.278.0",

Я несколько раз проверял свои переменные среды для подключения S3 Client, а также пробовал несколько разных способов передать тело/ключ объекта. Я также попытался использовать цепочку промисов вместо ожидания и удалить ожидание все вместе. Наконец-то попробовал вернуть ответ от конечной точки, а не как у меня в примере.

Самое странное в этом то, что в какой-то момент это работало, и у меня все еще есть файлы от той успешной загрузки в корзине.

Любые мысли/понимание будут высоко оценены.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
153
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сварнава из команды Vercel здесь. Мы выдвинули исправление для этого.

Моя проблема теперь решена. Спасибо!

Brandon 27.04.2023 20:23

Мы сталкиваемся с той же проблемой. Вроде регресс был.

Eric Meier 17.05.2023 01:01

Я также вижу это.

gunygoogoo 17.05.2023 03:53

Это должно быть исправлено немедленно.

Swarnava 17.05.2023 07:13

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