MST
星途 面试题库

面试题:SvelteKit API路由中如何处理不同HTTP方法的请求

在SvelteKit的API路由中,当需要同时处理GET、POST和DELETE这三种HTTP方法的请求时,应该怎么设计路由函数?请写出具体代码示例,并说明如何对不同方法的请求数据进行处理和验证。
45.5万 热度难度
前端开发Svelte

知识考点

AI 面试

面试题答案

一键面试

在SvelteKit的API路由中,可以通过导出不同的函数来处理不同的HTTP方法。以下是具体的代码示例:

// src/routes/api/someEndpoint/+server.js
import { validateGetData, validatePostData, validateDeleteData } from '$lib/validation';

// 处理GET请求
export async function GET({ url }) {
    const query = url.searchParams;
    const validationResult = validateGetData(query);
    if (!validationResult.valid) {
        return new Response('Invalid GET data', { status: 400 });
    }

    // 处理GET请求逻辑,例如从数据库获取数据
    const data = await someGetDataFunction();
    return new Response(JSON.stringify(data), {
        headers: { 'Content-Type': 'application/json' }
    });
}

// 处理POST请求
export async function POST({ request }) {
    const body = await request.json();
    const validationResult = validatePostData(body);
    if (!validationResult.valid) {
        return new Response('Invalid POST data', { status: 400 });
    }

    // 处理POST请求逻辑,例如将数据保存到数据库
    await somePostDataFunction(body);
    return new Response('Data saved successfully', { status: 201 });
}

// 处理DELETE请求
export async function DELETE({ request }) {
    const body = await request.json();
    const validationResult = validateDeleteData(body);
    if (!validationResult.valid) {
        return new Response('Invalid DELETE data', { status: 400 });
    }

    // 处理DELETE请求逻辑,例如从数据库删除数据
    await someDeleteDataFunction(body);
    return new Response('Data deleted successfully', { status: 200 });
}

数据处理和验证说明

  1. GET请求

    • 通过url.searchParams获取查询参数。
    • 使用validateGetData函数验证数据,该函数可以使用如zodjoi等库来进行数据验证。如果验证失败,返回400状态码。
    • 如果验证通过,执行获取数据的逻辑,并将数据以JSON格式返回。
  2. POST请求

    • 通过request.json()获取请求体数据。
    • 使用validatePostData函数验证数据。验证失败返回400状态码。
    • 验证通过后,执行保存数据到数据库等逻辑,并返回201状态码表示创建成功。
  3. DELETE请求

    • 同样通过request.json()获取请求体数据。
    • 使用validateDeleteData函数验证数据,失败返回400状态码。
    • 验证通过后,执行从数据库删除数据等逻辑,并返回200状态码表示删除成功。

在上述代码中,validateGetDatavalidatePostDatavalidateDeleteData函数是自定义的数据验证函数,具体实现可以根据业务需求使用不同的验证库和规则。例如使用zod库验证POST数据:

// $lib/validation.js
import { z } from 'zod';

const postDataSchema = z.object({
    someField: z.string().min(1),
    anotherField: z.number().positive()
});

export function validatePostData(data) {
    return postDataSchema.safeParse(data);
}

上述代码定义了一个postDataSchema来验证POST请求体数据,safeParse方法会返回验证结果,包括是否验证成功以及解析后的数据(如果成功)。