Server-side error handling helps catch and manage problems that happen on the server. It keeps your app running smoothly and shows friendly messages instead of crashing.
Server-side error handling in NextJS
Start learning this pattern below
Jump into concepts and practice - no test required
or
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Syntax
NextJS
export async function GET(request) { try { // server logic that might fail return new Response('Success', { status: 200 }) } catch (error) { return new Response('Error message', { status: 500 }) } }
Use try...catch blocks to catch errors in server functions.
Return a Response with an appropriate status code to inform the client.
Examples
NextJS
export async function GET(request) { try { const data = await fetch('https://api.example.com/data') if (!data.ok) throw new Error('Failed to fetch') const json = await data.json() return new Response(JSON.stringify(json), { status: 200 }) } catch (error) { return new Response('Could not load data', { status: 500 }) } }
NextJS
export async function POST(request) { try { const body = await request.json() if (!body.name) throw new Error('Name is required') // process data return new Response('Data saved', { status: 201 }) } catch (error) { return new Response(error.message, { status: 400 }) } }
Sample Program
This server function always throws an error, which is caught and returned as a 500 response with the error message.
NextJS
export async function GET(request) { try { // Simulate a server error throw new Error('Server failed to process request') } catch (error) { return new Response(`Error: ${error.message}`, { status: 500 }) } }
Important Notes
Always handle errors to avoid crashing your server functions.
Use meaningful status codes like 400 for client errors and 500 for server errors.
Logging errors on the server helps find and fix issues faster.
Summary
Server-side error handling keeps your app stable and user-friendly.
Use try...catch blocks in server functions to catch errors.
Return proper HTTP status codes and messages to inform clients about errors.
Practice
1. What is the main purpose of using
try...catch blocks in Next.js server-side functions?easy
Solution
Step 1: Understand server-side error handling
Server-side functions can fail due to unexpected issues. Usingtry...catchhelps catch these errors.Step 2: Purpose of
Thetry...catchtryblock runs code that might fail, and thecatchblock handles errors to prevent crashes and provide feedback.Final Answer:
To catch and handle errors gracefully during server-side execution -> Option BQuick Check:
Error handling = catch errors gracefully [OK]
Hint: Try-catch blocks catch errors on the server side [OK]
Common Mistakes:
- Confusing client-side and server-side error handling
- Thinking try-catch improves UI styling
- Assuming try-catch speeds up rendering
2. Which of the following is the correct syntax to catch errors in a Next.js server function?
easy
Solution
Step 1: Recall JavaScript error handling syntax
The correct syntax usestry { ... } catch (error) { ... }to catch errors.Step 2: Identify correct option
try { /* code */ } catch (error) { /* handle error */ } matches the correct syntax. Other options use invalid keywords or order.Final Answer:
try { /* code */ } catch (error) { /* handle error */ } -> Option CQuick Check:
Correct try-catch syntax = try { /* code */ } catch (error) { /* handle error */ } [OK]
Hint: Remember: try then catch with parentheses [OK]
Common Mistakes:
- Using incorrect keywords like except or handle
- Swapping try and catch blocks
- Omitting parentheses after catch
3. Consider this Next.js server function snippet:
What will be the HTTP status code returned when this function runs?
export async function GET() {
try {
throw new Error('Failed to fetch data');
} catch (error) {
return new Response(error.message, { status: 500 });
}
}What will be the HTTP status code returned when this function runs?
medium
Solution
Step 1: Analyze the thrown error
The function throws an error with message 'Failed to fetch data'.Step 2: Check the catch block response
The catch block returns a Response with status 500, indicating a server error.Final Answer:
500 -> Option DQuick Check:
Server error status code = 500 [OK]
Hint: Error caught returns status 500 by default [OK]
Common Mistakes:
- Assuming status 200 despite error
- Confusing 404 (not found) with server error
- Ignoring the status property in Response
4. Identify the error in this Next.js server function code:
export async function GET() {
try {
const data = await fetch('https://api.example.com/data');
return new Response(JSON.stringify(data));
} catch (error) {
return new Response('Error occurred', { status: 500 });
}
}medium
Solution
Step 1: Understand fetch response handling
The fetch call returns a Response object, not the actual data. We must callresponse.json()to parse it.Step 2: Identify missing JSON parsing
The code stringifies the Response object directly without parsing JSON, which is incorrect.Final Answer:
Not parsing fetch response to JSON before stringifying -> Option AQuick Check:
Parse response.json() before JSON.stringify() [OK]
Hint: Always parse fetch response with .json() before use [OK]
Common Mistakes:
- Stringifying the Response object directly
- Forgetting to await response.json()
- Assuming fetch returns JSON data directly
5. You want to create a Next.js server function that fetches user data and returns a 404 status if the user is not found, or a 500 status if the fetch fails. Which code snippet correctly implements this error handling?
hard
Solution
Step 1: Check for HTTP errors explicitly
export async function GET() { try { const res = await fetch('https://api.example.com/user'); if (!res.ok) { if (res.status === 404) return new Response('User not found', { status: 404 }); throw new Error('Fetch failed'); } const user = await res.json(); return new Response(JSON.stringify(user)); } catch { return new Response('Server error', { status: 500 }); } } checksres.okand handles 404 with a specific response, throwing errors for other failures.Step 2: Use try-catch for fetch failures
The catch block returns a 500 status for server errors, correctly distinguishing error types.Final Answer:
Correctly handles 404 if the user is not found and 500 if the fetch fails -> Option AQuick Check:
Check res.ok and catch errors for 404 and 500 [OK]
Hint: Check res.ok and catch errors separately for 404 and 500 [OK]
Common Mistakes:
- Not checking res.ok before parsing JSON
- Returning 404 inside catch block incorrectly
- Assuming fetch throws on 404 automatically
