Добрый день, подскажите пожалуйста, есть проект на Next js 14.2.3. С вот такими роутами:
app/(routes)/(catalog)/foo/[...slug]/page.jsx
app/(routes)/(catalog)/bar/[...slug]/page.jsx
app/(routes)/(catalog)/test/[...slug]/page.jsx
Внутри каждого компонента одинаковая логика генерации, но почему-то при npm run build на сервере падают много таких вот ошибок:
TypeError: fetch failed
at node:internal/deps/undici/undici:12500:13
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Module.w ([MASKED]//.next/server/app/(routes)/(catalog)/foo/[...slug]/page.js:1:7994) {
digest: '1853411761',
[cause]: ConnectTimeoutError: Connect Timeout Error
at onConnectTimeout (node:internal/deps/undici/undici:6621:28)
at node:internal/deps/undici/undici:6573:50
at Immediate._onImmediate (node:internal/deps/undici/undici:6605:13)
at process.processImmediate (node:internal/timers:478:21)
at process.callbackTrampoline (node:internal/async_hooks:130:17) {
code: 'UND_ERR_CONNECT_TIMEOUT'
}
}
Компонент у меня вот такой:
import React, {Suspense} from "react";
import {notFound} from "next/navigation";
export async function generateMetadata({params}) {
let info = (process.env.NODE_ENV === 'development') ? {cache: 'no-store'} : {};
if (params.slug) {
const path = `${process.env.API_URL}/path/${params.slug.join('/')}?type=foo`
const res = await fetch(path, info)
if (res.ok) {
const instance = await res.json()
return {
title: instance?.data?.title,
description: instance?.data?.description,
robots: {
index: instance?.data?.index,
follow: instance?.data?.follow,
}
}
}
}
return {
title: '',
description: '',
}
}
export async function generateStaticParams() {
let result = [];
let info = (process.env.NODE_ENV === 'development') ? {cache: 'no-store'} : {};
for (let l = 1; l <= 3; l++) {
const path = `${process.env.API_URL}/path/l/${l}`
const res = await fetch(path, info)
const items = await res.json()
let r = items.map(elem => {
return {
slug: elem.url.split("/")
}
})
result = [...result, ...r]
}
return result
}
export default async function Page({params, searchParams}) {
let items = [];
let info = (process.env.NODE_ENV === 'development') ? {cache: 'no-store'} : {next: {revalidate: 120}};
const {slug} = params
const page = Math.max(1, Number(searchParams?.page ?? 1))
const res = await fetch(`${process.env.API_URL}/path/s/${slug.join('/')}?type=foo`, info)
if (!res.ok) {
return notFound();
}
const instance = await res.json()
if (instance?.data) {
const resEx = await fetch(buildUrl(instance?.data, {page}), {next: {revalidate: 120}})
if (!resEx.ok) {
return notFound();
}
items = await resEx.json()
}
return (
<>
...
</>);
}
fetch делает запросы к бэкенд сервису, я в логах php-fpm видел что он в момент билда пытается увеличить
pm.max_children setting
возможно не хватает на сервер ресурсов ?