中间件
约 354 字大约 1 分钟
2026-09-22
中间件固定在 /src/hooks.server.ts 文件中, 这个文件是一个特殊的文件, 用来处理请求和响应的中间件.
// 需要导入类型 Handle, 这个类型是一个函数类型, 用来处理请求和响应的中间件.
import type { Handle } from '@sveltejs/kit'
import { sequence } from '@sveltejs/kit/hooks'
// ↓ 这里还能取出 cookoie, headers 等等
const logger: Handle = async ({ event, resolve }) => {
console.log('请求路径:', event.url.pathname)
// 构建原本需要的返回内容
const response = await resolve(event)
console.log('响应状态码:', response.status)
return response
}
const logger2: Handle = async ({ event, resolve }) => {
console.log('请求路径:', event.url.pathname)
// 构建原本需要的返回内容
const response = await resolve(event)
console.log('响应状态码:', response.status)
return response
}
// 这里的 sequence 函数是用来组合多个中间件的, 也就是可以把多个中间件组合成一个中间件, 然后在 handle 中使用.
// 比如这里的 logger 和 logger2 就是两个中间件, 通过 sequence 函数组合成一个中间件, 然后在 handle 中使用.
export const handle = sequence(logger, logger2)比如如果需要对接 better-auth 就大概率会使用到中间件
import type { Handle } from '@sveltejs/kit'
import { building } from '$app/environment'
import { auth } from '$lib/auth'
import { sequence } from '@sveltejs/kit/hooks'
import { svelteKitHandler } from 'better-auth/svelte-kit'
const authHandle: Handle = async ({ event, resolve }) => {
return svelteKitHandler({ event, resolve, auth, building })
}
// 这里也可以直接把 authHandle 放在 handle 中, 但是一般还会有其他中间件
export const handle = sequence(authHandle)