पाठ 20 / 25
+server.ts Routes and Hooks
HTTP handlers, handle and locals.
Endpoints and the handle hook
A +server.ts file exports functions named after HTTP methods (GET, POST, PUT, PATCH, DELETE, ...). Each receives a RequestEvent and returns a standard Response; the json() helper from @sveltejs/kit builds JSON responses. Use endpoints for webhooks, JSON APIs consumed by other clients, or file downloads. src/hooks.server.ts exports handle({ event, resolve }), which runs for every request before routing: a common pattern reads a session cookie, looks up the user and stores it on event.locals, which load functions, actions and endpoints can then read. Type locals in src/app.d.ts. Combine several handle functions with sequence from @sveltejs/kit/hooks; handleError logs unexpected errors.
Auth in handle, a JSON endpoint
hooks.server.ts, app.d.ts and +server.ts.
// src/app.d.ts
declare global {
namespace App {
interface Locals { user: { id: string; name: string } | null }
}
}
export {};
// src/hooks.server.ts
import type { Handle } from '@sveltejs/kit';
import { getUserBySession } from '$lib/server/auth';
export const handle: Handle = async ({ event, resolve }) => {
const sid = event.cookies.get('sid');
event.locals.user = sid ? await getUserBySession(sid) : null;
return resolve(event);
};
// src/routes/api/todos/+server.ts
import { json, error } from '@sveltejs/kit';
import type { RequestHandler } from './$types';
import { db } from '$lib/server/db';
export const GET: RequestHandler = async ({ locals, url }) => {
if (!locals.user) error(401, 'Sign in required');
const limit = Number(url.searchParams.get('limit') ?? 20);
return json(await db.todo.list(locals.user.id, Math.min(limit, 100)));
};Prefer actions for your own forms
Form actions give progressive enhancement and typed form results; +server.ts is better for APIs used by other clients or non-HTML responses.
त्वरित जाँच: Where is the usual place to attach the current user for all server code?
- A global variable in a .svelte.ts module
- event.locals inside the handle hook in hooks.server.ts
- The page component props
- localStorage
Answer
event.locals inside the handle hook in hooks.server.ts — locals is per request and safe on the server.