Create a Simple Svelte Server Route with server.js
📖 Scenario: You are building a small web app using SvelteKit. You want to create a server route that returns a list of fruits as JSON data. This will help your frontend show the fruit list dynamically.
🎯 Goal: Build a SvelteKit server route using +server.js that returns a JSON response with a list of fruits.
📋 What You'll Learn
Create a server route file named +server.js
Define a GET handler function that returns a JSON response
Use an array of fruits as the data source
Return the fruits array in the response body with status 200
💡 Why This Matters
🌍 Real World
Server routes in SvelteKit let you build backend APIs easily inside your frontend project. This is useful for fetching data, handling forms, or connecting to databases.
💼 Career
Knowing how to create server routes is essential for full-stack SvelteKit developers. It helps you build dynamic web apps that communicate between frontend and backend smoothly.
Progress0 / 4 steps
1
Set up the fruits data array
Create a constant array called fruits with these exact string values: "apple", "banana", "cherry".
Svelte
Hint
Use const fruits = ["apple", "banana", "cherry"] to create the array.
2
Create the GET handler function
Add an exported async function named GET that takes a single parameter {} (an empty object).
Svelte
Hint
Write export async function GET({}) { } to define the route handler.
3
Return the fruits array as JSON response
Inside the GET function, return a new Response object with the JSON stringified fruits array as the body, and set the header Content-Type to application/json. Use status code 200.
Svelte
Hint
Use return new Response(JSON.stringify(fruits), { status: 200, headers: { 'Content-Type': 'application/json' } }).
4
Complete the +server.js file
Ensure the entire +server.js file contains the fruits array and the exported async GET function returning the JSON response exactly as shown.
Svelte
Hint
Check that the file has the fruits array and the GET function returning the JSON response.
Practice
(1/5)
1. What is the main purpose of a +server.js file in a SvelteKit project?
easy
A. To style the application using CSS
B. To define client-side UI components
C. To manage database connections directly in the browser
D. To handle server-side HTTP requests like GET or POST
Solution
Step 1: Understand the role of +server.js
This file is used to write server-side code that responds to HTTP requests.
Step 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 D
Quick Check:
Server routes = handle HTTP requests [OK]
Hint: Remember: +server.js is for server code only [OK]
Common Mistakes:
Confusing +server.js with client components
Thinking CSS or styling goes in +server.js
Assuming database code runs in the browser
2. Which of the following is the correct way to export a GET handler in a +server.js file?
easy
A. export async function get() { return { body: { message: 'Hello' } }; }
B. export function get() { return { body: { message: 'Hello' } }; }
C. export async function GET() { return { body: { message: 'Hello' } }; }
B. {"status":200,"body":{"success":true,"data":[1,2,3]}}
C. [1, 2, 3]
D. An error because body must be a string
Solution
Step 1: Understand the returned object structure
The handler returns an object with status and body. The body is the JSON data sent to the client.
Step 2: Identify the actual response body content
The client receives the body content serialized as JSON: {"success":true,"data":[1,2,3]}.
Final Answer:
{"success":true,"data":[1,2,3]} -> Option A
Quick Check:
Response body = JSON data object [OK]
Hint: Response body is the JSON object inside returned body [OK]
Common Mistakes:
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
4. What is wrong with this +server.js POST handler?
export async function POST(request) {
const data = await request.json();
return { status: 201, body: { received: data } };
}
medium
A. Nothing is wrong; this is correct syntax
B. The request parameter is missing the 'event' wrapper
C. The handler must return a Response object, not a plain object
D. The function should be named post in lowercase
Solution
Step 1: Check handler parameter
The POST handler receives an event object containing request. The code names it request but calls request.json(), which fails because the event object has no json() method; use event.request.json() or destructure { request }.
Step 2: Identify the correct fix
The parameter needs destructuring like POST({ request }) or renaming to event with event.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 B
Quick Check:
Destructure { request } from event [OK]
Hint: Destructure { request } from event parameter [OK]
Common Mistakes:
Using lowercase method names instead of uppercase
Expecting a Response object instead of plain object
Misunderstanding request parameter structure
5. You want to create a +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?
hard
A. export async function POST({ request }) {
const data = await request.json();
if (!data.name || typeof data.name !== 'string' || data.name.trim() === '') {
return { status: 400, body: { error: 'Name is required' } };
}
return { status: 200, body: { message: `Hello, ${data.name}` } };
}
B. export async function POST(request) {
const data = await request.json();
if (!data.name) {
throw new Error('Name missing');
}
return new Response(JSON.stringify({ message: `Hello, ${data.name}` }), { status: 200 });
}