Claude-skills nextjs-server-side-error-debugging
install
source · Clone the upstream repo
git clone https://github.com/ckorhonen/claude-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ckorhonen/claude-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/continuous-learning/examples/nextjs-server-side-error-debugging" ~/.claude/skills/ckorhonen-claude-skills-nextjs-server-side-error-debugging && rm -rf "$T"
manifest:
skills/continuous-learning/examples/nextjs-server-side-error-debugging/SKILL.mdsource content
Next.js Server-Side Error Debugging
Problem
Server-side errors in Next.js don't appear in the browser console, making debugging frustrating when you're looking in the wrong place. The browser shows a generic error page or 500 status, but no stack trace or useful error information appears in DevTools.
Context / Trigger Conditions
This skill applies when:
- Page displays "Internal Server Error" or custom error page
- Browser console shows no errors, or only a generic fetch failure
- You're using
,getServerSideProps
, or API routesgetStaticProps - Error only occurs on page refresh or direct navigation (not client-side transitions)
- The error is intermittent and hard to reproduce in the browser
Common misleading symptoms:
- "Unhandled Runtime Error" modal that doesn't show the real cause
- Network tab shows 500 but response body is empty or generic
- Error disappears when you add console.log (timing issue)
Solution
Step 1: Check the Terminal
The actual error with full stack trace appears in the terminal where
npm run dev
or next dev is running. This is the first place to look.
# If you don't see the terminal, find the process ps aux | grep next # Or restart with visible output npm run dev
Step 2: Add Explicit Error Handling
For persistent debugging, wrap server-side code with try-catch:
export async function getServerSideProps(context) { try { const data = await fetchSomething(); return { props: { data } }; } catch (error) { console.error('getServerSideProps error:', error); // Return error state instead of throwing return { props: { error: error.message } }; } }
Step 3: For Production Errors
Check your hosting provider's logs:
- Vercel: Dashboard → Project → Logs (Functions tab)
- AWS: CloudWatch Logs
- Netlify: Functions tab in dashboard
- Self-hosted: Check your Node.js process logs
Step 4: Common Causes
- Environment variables: Missing in production but present locally
- Database connections: Connection string issues, cold starts
- Import errors: Server-only code accidentally imported on client
- Async/await: Missing await on async operations
- JSON serialization: Objects that can't be serialized (dates, functions)
Verification
After checking the terminal, you should see:
- Full stack trace with file name and line number
- The actual error message (not generic 500)
- Variable values if you added console.log statements
Example
Symptom: User reports page shows "Internal Server Error" after clicking a link.
Investigation:
- Open browser DevTools → Console: Empty
- Network tab shows:
GET /dashboard → 500 - Check terminal running
:npm run dev
Error: Cannot read property 'id' of undefined at getServerSideProps (/app/pages/dashboard.tsx:15:25) at renderToHTML (/app/node_modules/next/dist/server/render.js:428:22)
Cause found: Database query returned
null instead of user object.
Notes
- In development, Next.js sometimes shows an error overlay, but it often has less detail than the terminal output
inreactStrictMode: true
causes double-execution of server functions in development, which can make debugging confusingnext.config.js- For API routes, the error appears in the same terminal as page errors
- Client-side errors (in useEffect, event handlers) DO appear in browser console— this skill only applies to server-side code
- If using
(production mode locally), errors may be less verbose; checknext start
and consider adding custom error loggingNODE_ENV