INVALID_URL развертывание приложения next.js в статическом веб-приложении Azure во время сборки действий GitHub

Я получаю ошибку ниже, и вращающиеся колеса выясняют ее. Это происходит только во время моей сборки действий на github. Когда я запускаю сборку локально, она работает нормально, и я могу обратиться к обработчику маршрута. Я также могу запустить действие GitHub локально, используя act и Docker, и тогда я тоже получаю ошибку.

Вот ошибка:

TypeError [ERR_INVALID_URL]: Invalid URL
    at new NodeError (node:internal/errors:405:5)
    at new URL (node:internal/url:676:13)
    at new ni (/home/runner/work/frontend/.next/server/app/api/reports/route.js:6:40210)

И рассматриваемый файл src/app/api/reports/route.tsx:

export async function GET(request: Request) {
  const { searchParams } = new URL(request.url);  // <- here is the problem
  const id = searchParams.get('id');
  const partitionKey = searchParams.get('partitionKey');

  if (!id || !partitionKey) {
    return NextResponse.json({msg: 'Success'});
  }

Я ожидаю, что сборка завершится, и я смогу нажать: http://localhost:3000/api/reports?id=SOME_ID&partitionKey=SOME_KEY

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

Когда я запускаю его локально, указанный выше URL-адрес работает.

Я перепробовал массу, в том числе:

  1. Я изменил имя файла на route-bad.tsx, и сборка прошла успешно.
  2. Я отключил анализ URL-адресов, и сборка прошла успешно.
  3. Я попробовал альтернативную форму анализа сборки, в которой используются только строки и библиотека qs. Я все еще получаю ошибку.

Любая помощь приветствуется!

Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
0
0
181
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам необходимо правильно указать URL-адрес, начиная с разных способов: URL://www www.skaj.dom http://www и т. д.

Вы имеете в виду здесь: new URL(request.url)? Что-то вроде: new URL(`https://${request.url}`) но с множеством таких опций?

Brian 26.03.2024 22:17

В этом случае вашего ответа только часть после слова «новый». Например, вместо добавления цитаты и т. д. Весь URL-адрес Для Google.com вместо URL-адреса. Измените гиперссылку на всю новую часть вместо URL-адреса «URL:(www» на www. Вы на полпути, я уже вижу, что ${req - хороший путь

MateuszC 26.03.2024 22:27

В общем, вы получили ошибку «неверный URL».

MateuszC 26.03.2024 22:38

Я ценю ответ, но не думаю, что дело в формате URL. Эта часть отлично работает во время выполнения. Я выясняю, почему React вообще запускает этот код во время сборки. Вот тут и ломается и что-то не правильно настраивается. Эта статья дает мне несколько хороших идей: github.com/vercel/next.js/discussions/35534

Brian 27.03.2024 14:08
Ответ принят как подходящий

Я понял это. Это обсуждение помогло мне указать правильное направление: https://github.com/vercel/next.js/discussions/35534

Оказывается, это был всего лишь отвлекающий маневр:

const { searchParams } = new URL(request.url); // <- here is the problem

Настоящая проблема здесь:

const cosmosClient = new CosmosClient({
  endpoint: COSMOS_ENDPOINT,
  key: COSMOS_KEY,
});
export async function GET(request: Request) {
  ...
}

Две проблемы происходили одновременно:

  1. Я создавал CosmosClient вне вызова функции, а это означало, что импорт этого файла приводил к выполнению этого бита. Вот почему ошибка произошла во время компиляции. Я перенес инициализацию в функцию.
  2. Это произошло вообще потому, что в действии github при сборке не были установлены переменные окружения. Они были установлены позже во время развертывания. В этом ответе рассказывается о решении, которое я использовал для установки переменных среды во время сборки действия github.

После исправления этих двух ошибка исчезает. Сложный вопрос, но я определенно лучше понимаю компиляцию React.

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