Discover how server routes turn chaotic URL handling into clean, powerful backend code!
Why Server routes (+server.js) in Svelte? - Purpose & Use Cases
Imagine building a website where every time a user clicks a link, you have to manually check the URL, decide what content to show, and send back the right data--all by writing lots of separate code for each page.
Doing this manually means writing repetitive code, mixing server logic with page content, and making it easy to break things. It's slow to update and hard to keep organized as your site grows.
Server routes let you organize your backend code by URL paths, so each route handles its own logic cleanly. Using a +server.js file in SvelteKit, you can easily define how your server responds to requests, keeping code neat and scalable.
if (url === '/api/data') { sendData(); } else if (url === '/api/user') { sendUser(); }
export function GET() { return new Response('data'); } // inside +server.js for /api/data routeThis makes building dynamic, data-driven websites simple and organized, letting your server respond exactly how you want for each URL.
Think of an online store where /api/products returns product info and /api/cart manages your shopping cart--all handled cleanly by separate server routes.
Manual URL handling is messy and error-prone.
+server.js files organize server logic by route.
This leads to cleaner, easier-to-maintain backend code.
Practice
+server.js file in a SvelteKit project?Solution
Step 1: Understand the role of
This file is used to write server-side code that responds to HTTP requests.+server.jsStep 2: Differentiate client and server roles
Client-side UI components and styling are handled elsewhere, not in+server.js.Final Answer:
To handle server-side HTTP requests like GET or POST -> Option DQuick Check:
Server routes = handle HTTP requests [OK]
+server.js is for server code only [OK]- Confusing
+server.jswith client components - Thinking CSS or styling goes in
+server.js - Assuming database code runs in the browser
+server.js file?Solution
Step 1: Recall SvelteKit server route syntax
Handlers must be exported as async functions named in uppercase HTTP methods, e.g.,GET.Step 2: Check syntax correctness
Only export async function GET() { return { body: { message: 'Hello' } }; } usesexport async function GET()which is correct syntax.Final Answer:
export async function GET() { return { body: { message: 'Hello' } }; } -> Option CQuick Check:
Use uppercase HTTP method names for exports [OK]
- Using lowercase method names like 'get' instead of 'GET'
- Omitting async keyword for async handlers
- Incorrect export syntax without 'function'
+server.js code, what will be the JSON response body when a GET request is made?
export async function GET() {
return {
status: 200,
body: { success: true, data: [1, 2, 3] }
};
}Solution
Step 1: Understand the returned object structure
The handler returns an object withstatusandbody. Thebodyis the JSON data sent to the client.Step 2: Identify the actual response body content
The client receives thebodycontent serialized as JSON: {"success":true,"data":[1,2,3]}.Final Answer:
{"success":true,"data":[1,2,3]} -> Option AQuick Check:
Response body = JSON data object [OK]
- Confusing the whole return object with the response body
- Expecting raw arrays or strings instead of JSON objects
- Thinking status code is part of JSON body
+server.js POST handler?
export async function POST(request) {
const data = await request.json();
return { status: 201, body: { received: data } };
}Solution
Step 1: Check handler parameter
The POST handler receives an event object containingrequest. The code names itrequestbut callsrequest.json(), which fails because the event object has nojson()method; useevent.request.json()or destructure{ request }.Step 2: Identify the correct fix
The parameter needs destructuring likePOST({ request })or renaming to event withevent.request. The request parameter is missing the 'event' wrapper correctly identifies the missing 'event' wrapper.Final Answer:
The request parameter is missing the 'event' wrapper -> Option BQuick Check:
Destructure { request } from event [OK]
- Using lowercase method names instead of uppercase
- Expecting a Response object instead of plain object
- Misunderstanding request parameter structure
+server.js route that accepts a POST request with JSON data, validates that the JSON has a non-empty name string, and returns a 400 error if invalid. Which code snippet correctly implements this?Solution
Step 1: Validate the 'name' field properly
The correct snippet destructures{ request }, checks ifnameexists, is a string, and non-empty aftertrim(), returning 400 if invalid.Step 2: Confirm status codes and completeness
It uses 400 for validation errors and 200 for success; others use wrong parameters, incomplete checks, wrong statuses (500/404), or throw errors.Final Answer:
The snippet with full validation (exists, string, trimmed non-empty) and 400 status -> Option AQuick Check:
Validate input and return 400 if invalid [OK]
- Returning wrong status codes like 404 or 500 for validation errors
- Throwing errors instead of returning HTTP responses
- Not trimming strings before checking emptiness
Ready to prove it?
Pass the test and this pattern moves unknown
