Kaip ištaisyti vidinę 500 klaidą Next.js Server Components

Atidarote maršrutą Next.js App Router projekte, puslapis prieš akimirką veikė, o dabar naršyklėje rodoma vidinė serverio klaida arba HTTP 500 atsakymas. Atnaujinimas nepadeda. Kliento pusės konsolėje gali būti mažai naudingos informacijos, nes gedimas įvyko, kai Server Component buvo atvaizduojamas serveryje.

Tokia situacija yra pakankamai dažna, kad atrodytų paslaptinga, tačiau 500 klaida nėra diagnozė. Tai reiškia, kad serveris apdorodamas užklausą susidūrė su netikėta sąlyga. Next.js gali grąžinti 500 klaidą dėl neapdorotos programos klaidos, o Server Components yra ypač svarbūs tikrinti, nes jie gali vykdyti duomenų prieigą, duomenų bazės užklausas, autentifikacijos patikras ir kitą tik serveryje veikiančią logiką atvaizdavimo metu.

Pastaba apie versiją: patikrinta 2026 m. rugsėjo 11 d., oficialioje Next.js dokumentacijoje kaip naujausia versija nurodyta Next.js 16.3.4. Klaidų formuluotės, kūrimo perdangos, vykdymo laiko elgsena ir diegimo žurnalai gali skirtis priklausomai nuo versijos ir talpinimo platformos, todėl pagrindiniu įrodymu naudokite savo projekto krūvio seką.

Dirbtiniu intelektu sugeneruota iliustracija, kurioje naršyklėje rodomas Next.js vidinės serverio klaidos 500 puslapis
Dirbtiniu intelektu sugeneruota Next.js 500 klaidos scenarijaus iliustracija; tai nėra tikras ekrano vaizdas iš veikiančios programos.

Kas dažniausiai sukelia 500 klaidą Server Component?

App Router kontekste Next.js pagal nutylėjimą naudoja Server Components. Oficialioje Server and Client Components dokumentacijoje paaiškinta, kad Server Components vykdomi serveryje ir gali atlikti serverio pusės darbus, pvz., duomenų prieigą. Jei viena iš šių operacijų meta išimtį, o ji nėra apdorota taip, kad būtų sugeneruotas galiojantis atsakymas arba atsarginis variantas, užklausa gali nepavykti.

Tikėtina priežastisKo ieškotiPirmas veiksmas
Nepavykusi API užklausaDNS klaidos, ryšio sutrikimai, netikėti 401/403/404/500 atsakymai, neteisingas JSONUžregistruokite aukštesnio lygio būseną ir patikrinkite response.ok
Duomenų bazės gedimasRyšio klaidos, trūkstama lentelė, pasibaigusios kredencialai, užklausų išimtysVykdykite užklausą atskirai ir peržiūrėkite serverio žurnalus
Trūkstamas aplinkos kintamasisundefined URL, žetonas, prisijungimo eilutė arba slaptažodisAtskirai patikrinkite vietinius ir diegimo aplinkos nustatymus
Serverio/kliento ribos problemaHukas, naršyklės API arba interaktyvus kodas naudojamas netinkamame komponentePerkelkite interaktyvų kodą už 'use client' ribos
Neapdorota programos išimtisKrūvio seka nurodo į jūsų puslapį, išdėstymą, pagalbinę funkciją, autentifikacijos kodą arba bibliotekąIštaisykite klaidą keliančią eilutę, tada pridėkite tinkamą klaidų ribą
Diegimo/vykdymo laiko problemaVeikia lokaliai, bet nepavyksta tik po diegimoPalyginkite vykdymo laiko kintamuosius, tinklo prieigą, Node/vykdymo laiko prielaidas ir gamybos žurnalus

1 žingsnis: Atkartokite nepavykstantį maršrutą lokaliai ir perskaitykite serverio išvestį

Pradėkite nuo lengviausiai gaunamų įrodymų. Paleiskite tą patį projektą lokaliai su įprasta kūrimo komanda, pvz., npm run dev, ir užklauskite tikslų maršrutą, kuris nepavyksta. Nepradėkite keisti talpyklos, atnaujinti paketus ar šalinti užraktų failų. Pirmiausia raskite pirmąją reikšmingą išimtį terminale, kuriame veikia Next.js.

Naršyklė praneša, kad užklausa nepavyko; serverio krūvio seka greičiausiai pasakys, kodėl. Ieškokite pirmosios eilutės savo programos kode, o ne paskutinės eilutės karkaso viduje. Užfiksuokite maršrutą, failą, eilutės numerį, klaidos tipą ir tai, ar gedimas įvyksta kiekvienos užklausos metu, ar tik su tam tikrais duomenimis.

Dirbtiniu intelektu sugeneruota terminalo iliustracija, rodanti Next.js kūrimo serverio krūvio seką nepavykusiam duomenų gavimui
Dirbtiniu intelektu sugeneruota iliustracija, kaip tikrinti Next.js serverio terminalą pirmajai naudingai krūvio sekos įrašui.

Jei problema kyla tik gamybos aplinkoje, vietoj to naudokite savo talpintojo vykdymo laiko žurnalus. Vercel platformoje oficialios žurnalizavimo gairės skiria kūrimo žurnalus nuo vykdymo laiko žurnalų ir paaiškina, kad vykdymo laiko įrašus galima filtruoti pagal būsenos kodą ir užklausos kelią. Vercel taip pat dokumentuoja, kad funkcijos kvietimo nesėkmė gali grąžinti 500 klaidą, kai vykdymo laikas sugriūva arba įvyksta neapdorota išimtis ar atmestas įsipareigojimas.

2 žingsnis: Izoliuokite duomenų gavimą ir padarykite gedimus aiškius

Server Components dažnai nepavyksta laukiant aukštesnio lygio API arba duomenų bazės. Oficiali Next.js duomenų gavimo pamoka parodo, kaip Server Components atlieka asinchroninę serverio pusės duomenų prieigą. Laikykite kiekvieną išorinę priklausomybę galimu gedimo tašku.

Funkcijai fetch() atskirkite tinklo gedimą nuo HTTP klaidos atsakymo. Atsakymą su nesėkmės būsenos kodu reikia patikrinti prieš analizuojant ar atvaizduojant jo duomenis. Mažas apvalkalas padaro tikrąją problemą matomą serverio žurnaluose:

async function getData() {
  const apiUrl = process.env.API_URL;

  if (!apiUrl) {
    throw new Error('API_URL is not configured');
  }

  const response = await fetch(apiUrl, { cache: 'no-store' });

  if (!response.ok) {
    throw new Error(`Upstream request failed: ${response.status}`);
  }

  return response.json();
}

Neregistruokite prieigos žetonų, slapukų, autorizacijos antraščių, duomenų bazės slaptažodžių ar pilnų slaptažodžius turinčių URL. Būsenos kodas, užklausos tikslo pavadinimas, koreliacijos ID ir išvalyta klaidos žinutė paprastai yra pakankami, kad būtų identifikuota nepavykusi priklausomybė.

Dirbtiniu intelektu sugeneruota kodo redaktoriaus iliustracija, rodanti response.ok patikrinimą Next.js Server Component
Dirbtiniu intelektu sugeneruota iliustracija, kaip pridėti aiškų atsakymo patikrinimą prieš Server Component naudojant gautus duomenis.

3 žingsnis: Patikrinkite aplinkos kintamuosius ir serverio/kliento ribą

Jei tas pats įsipareigojimas veikia lokaliai, bet grąžina 500 klaidą po diegimo, prieš keisdami programos logiką palyginkite aplinkas. Įsitikinkite, kad kiekvienas reikalingas serverio pusės kintamasis egzistuoja diegimo tikslinėje aplinkoje ir kad jo reikšmė nurodo į paslaugą, pasiekiamą iš to vykdymo laiko. Vietinis .env failas neįrodo, kad gamybos diegime yra tos pačios reikšmės.

Tada patikrinkite komponentų ribas. Next.js Server Components yra numatytieji App Router, o interaktyvus kodas, kuriam reikia būsenos, efektų, įvykių apdorojimo ar tik naršyklėje veikiančių API, turi būti Client Component. Oficialios Next.js mokymo medžiagos parodo, kaip komponentą, naudojantį useState, perkelti už 'use client' direktyvos. Kai kurios ribų klaidos yra aptinkamos kompiliavimo metu, o ne tampa 500 klaida, tačiau jų pašalinimas neleidžia klaidos kodų struktūroje laikyti talpinimo sutrikimu.

Taip pat patikrinkite bet kokį tik serveryje veikiančią paketą, kuris daro prielaidą apie konkrečias Node.js galimybes, failų sistemos išdėstymą, natyvųjį binarinį failą ar tinklo aplinką. Priklausomybė gali veikti viename kompiuteryje ir nepavykti kitoje vykdymo aplinkoje, jei šios prielaidos skiriasi.

4 žingsnis: Pridėkite tinkamą klaidų apdorojimą vietoj išimties slėpimo

Kai pagrindinė priežastis žinoma, nuspręskite, ar klaida yra tikėtina, ar netikėta. Trūkstamas įrašas gali reikalauti „nerasta“ atsakymo. Patvirtinimo nesėkmė gali reikalauti įprastos žinutės. Netikėtą išimtį reikia užregistruoti ir leisti jai pasiekti klaidų ribą, o ne tyliai paversti tuščiais duomenimis, kurie sugenda kitur.

Next.js dokumentuoja specialų error.tsx failą kaip maršruto segmento klaidų ribą netikėtoms klaidoms. Jo komponentas yra Client Component ir gali pasiūlyti pakartotinį bandymą per pateiktą reset funkciją. Oficiali Next.js klaidų apdorojimo vadovas taip pat parodo, kaip naudoti notFound(), kai prašomas resursas neegzistuoja.

'use client';

export default function Error({
  reset,
}: {
  reset: () => void;
}) {
  return (
    <main>
      <h2>Something went wrong.</h2>
      <button onClick={() => reset()}>Try again</button>
    </main>
  );
}

Klaidų riba pagerina tai, ką mato vartotojas; ji neištaiso pagrindinės išimties. Palikite serverio pusės žurnalą, kuris identifikuoja priežastį, ir neatskleiskite jautrių krūvio sekų ar slaptažodžių vartotojo sąsajoje.

5 žingsnis: Patvirtinkite pataisymą gamybai panašiame sukūrimo procese

Kūrimo serveris yra būtinas diagnostikai, tačiau tai nėra galutinis testas. Kai maršrutas veikia lokaliai, paleiskite gamybos sukūrimą naudodami savo projekto paketų tvarkyklę, jei įmanoma, paleiskite jį gamybos režimu ir užklauskite to paties maršruto su tomis pačiomis atitinkamomis duomenų sąlygomis. Tada patikrinkite diegimo aplinką atidarius vykdymo laiko žurnalus.

npm run build
npm start

Jei jūsų talpinimo platforma kuria kitaip nei jūsų nešiojamas kompiuteris, prieš skelbdami pakeitimą taip pat išbandykite peržiūros diegimą. Pataisymas yra patikimas tik tada, kai maršrutas grąžina tikėtiną būseną, atvaizduoja tikėtiną turinį ir tam užklausai neatsiranda nauja serverio išimtis.

Dirbtiniu intelektu sugeneruota naršyklės iliustracija, rodanti Next.js programą sėkmingai įkeliant po serverio klaidos pataisymo
Dirbtiniu intelektu sugeneruota iliustracija, kaip patikrinti sutvarkytą maršrutą po to, kai buvo ištaisytas serverio pusės gedimas.

Kaip patvirtinti, kad 500 klaida iš tikrųjų ištaisyta

  • Anksčiau nepavykęs URL pakartotinai įkeliamas be HTTP 500 atsakymo.
  • Serverio terminale arba gamybos vykdymo laiko žurnaluose neberodoma pradinė išimtis.
  • Tas pats pataisymas išlieka po npm run build ir gamybos režimo paleidimo arba peržiūros diegimo.
  • Reikalingi aplinkos kintamieji yra toje aplinkoje, kurioje gedimas įvyko iš pradžių.
  • Išorinių API arba duomenų bazės gedimai dabar sukuria kontroliuojamą klaidų kelią, o ne nepaaiškinamą avariją.
  • Interaktyvus, tik naršyklėje veikiantis kodas yra Client Components, o slaptažodžiai ir privilegijuota duomenų prieiga lieka serveryje.
  • error.tsx riba suteikia vartotojams pagrįstą atsarginį variantą netikėtiems maršruto segmento gedimams.

Jei vis tiek nepavyksta

Supaprastinkite maršrutą, kol jis nustos strigti. Laikinai pakeiskite vieną priklausomybę po kitos žinoma saugia reikšme: pirmiausia duomenų bazės skambutį, tada išorinį API, tada autentifikaciją arba seanso paiešką, tada vaiko komponentus. Pirmoji pašalinta operacija, dėl kurios 500 klaida dingsta, nurodo sritį, kurią reikia tirti. Po testavimo atkurkite kiekvieną priklausomybę, o ne palikite netikrus duomenis galutinėje programoje.

Tik gamybos aplinkoje pasitaikančiai problemai palyginkite tikslų įdiegtą įsipareigojimą, Node/vykdymo laiko konfigūraciją, aplinkos kintamuosius, tinklo pasiekiamumą ir priklausomybių versijas. Jei platforma praneša apie tiekėjui specifinį klaidos kodą, naudokite oficialią to tiekėjo dokumentaciją būtent tam kodui, o ne darykite prielaidą, kad visos 500 klaidos turi tą pačią priežastį.

Pagrindinė trikčių šalinimo taisyklė yra paprasta: „Internal Error 500“ laikykite simptomu. Naudingi įrodymai yra serverio pusės išimtis, įvykusi iškart prieš tai. Pirmiausia raskite tą išimtį, padarykite nepavykusią priklausomybę aiškią, ištaisykite aplinką arba kodo ribą, kuri ją sukėlė, ir patvirtinkite rezultatą toje pačioje vykdymo aplinkoje, kurioje problema įvyko.

Palikti komentarą

Kaip ištaisyti klaidą „Prisma Client has not been generated yet“

Kaip ištaisyti klaidą „Prisma Client has not been generated yet“

Ištaisykite „Prisma Client“ nesugeneravimo klaidą patikrinę generatorių, schemą, išvesties kelią, importus, versijas, monorepo sąranką ir diegimo kūrimo veiksmus.

Kaip išspręsti SSL sertifikato problemą: „Unable to Get Local Issuer Certificate“ Git

Kaip išspręsti SSL sertifikato problemą: „Unable to Get Local Issuer Certificate“ Git

Ištaisykite Git klaidą „unable to get local issuer certificate“ nustatydami pasitikėjimo šaltinį, įdiegdami tinkamą CA grandinę ir palikdami įjungtą SSL patikrą.

Kaip išspręsti MongoDB tinklo laiko limito klaidą Mongoose jungtyje

Kaip išspręsti MongoDB tinklo laiko limito klaidą Mongoose jungtyje

Ištaisykite MongoDB tinklo laiko limito klaidas Mongoose nustatydami laiko limito tipą, patikrindami Atlas arba TCP pasiekiamumą, koreguodami URI ir tikslindami laiko limitus tik tada, kai tai pagrįsta.

Kaip išspręsti „Execution Policy Restricted“ klaidą Windows PowerShell

Kaip išspręsti „Execution Policy Restricted“ klaidą Windows PowerShell

Ištaisykite PowerShell vykdymo politikos „Restricted“ klaidą patikrindami sritį ir grupės politiką, tada pasirinkdami RemoteSigned, Unblock-File arba laikiną sesijos parinktį.

Kaip išspręsti npm ERR! code ERESOLVE peer dependency konfliktą

Kaip išspręsti npm ERR! code ERESOLVE peer dependency konfliktą

Ištaisykite npm ERESOLVE peer dependency konfliktus nustatydami nesuderinamą paketo diapazoną, suderindami versijas, naudodami komandas npm explain ir npm ls, bei laikydami legacy-peer-deps arba force tik kontroliuojamais atsarginiais variantais.

Kaip ištaisyti Redis prisijungimo prie 127.0.0.1:6379 klaidą

Kaip ištaisyti Redis prisijungimo prie 127.0.0.1:6379 klaidą

Ištaisykite Redis prisijungimo atmetimo klaidas adresu 127.0.0.1:6379 tikrindami serverį, prievadą, Docker tinklą, redis.conf, autentifikaciją ir TLS.

Kaip ištaisyti vidinę 500 klaidą Next.js Server Components

Kaip ištaisyti vidinę 500 klaidą Next.js Server Components

Ištaisykite Next.js Server Component 500 klaidas stebėdami serverio žurnalus, tikrindami duomenų gavimą ir aplinkos kintamuosius, apdorodami klaidas ir patikrindami gamybinį sukūrimą.

Kaip išspręsti Kubernetes CrashLoopBackOff klaidą vietiniame Minikube

Kaip išspręsti Kubernetes CrashLoopBackOff klaidą vietiniame Minikube

Diagnozuokite ir ištaisykite Kubernetes CrashLoopBackOff klaidą vietiniame Minikube tikrindami pod būseną, ankstesnius žurnalus, išėjimo priežastis, zondas, konfigūraciją, atminties apribojimus ir klasterio sveikatą.

Kaip išspręsti „Docker Desktop Engine Stopped“ klaidą sistemoje Windows 11

Kaip išspręsti „Docker Desktop Engine Stopped“ klaidą sistemoje Windows 11

Ištaisykite „Docker Desktop Engine Stopped“ klaidą sistemoje Windows 11 tikrindami Docker būseną, atnaujindami ir paleisdami iš naujo WSL 2, tikrindami virtualizaciją bei naudodami diagnostiką prieš atstatymą.

Kaip ištaisyti klaidą „Uncaught ReferenceError: process is not defined“ naudojant Vite

Kaip ištaisyti klaidą „Uncaught ReferenceError: process is not defined“ naudojant Vite

Ištaisykite Vite klaidą „process is not defined“ pakeisdami Node stiliaus process.env naudojimą, teisingai sukonfigūruodami VITE_ kintamuosius ir patikrindami priklausomybes.