SvelteKit如何全局拦截自定义Forbidden错误并返回HTTP 403响应?
在SvelteKit中全局拦截自定义Forbidden错误并返回403响应
你说得对,handleError钩子确实只能调整错误内容,没法修改默认的500状态码。要实现全局拦截自定义Forbidden错误并返回403,应该用**hooks.server.ts里的handle钩子**——它能覆盖整个请求的生命周期,包括捕获server端load函数或action抛出的错误。
具体实现步骤:
- 在
hooks.server.ts中导入所需的工具和自定义错误类:
import type { Handle } from '@sveltejs/kit'; import { error } from '@sveltejs/kit'; // 替换成你的Forbidden类实际路径 import { Forbidden } from '$lib/utils/errors';
- 编写
handle函数,通过try/catch捕获请求执行过程中的错误:
export const handle: Handle = async ({ event, resolve }) => { try { // 执行请求对应的所有server逻辑(load、action等) return await resolve(event); } catch (err) { // 判断是否是自定义的Forbidden错误 if (err instanceof Forbidden) { // 抛出SvelteKit标准的403错误 throw error(403, 'Forbidden'); } // 其他类型的错误保持原有逻辑抛出,让SvelteKit默认处理 throw err; } };
这个方案的优势:
- 只需写一次,全局生效,不用在每个
+page.server.ts里重复写catch逻辑 - 不管是page的server load函数,还是action里抛出的
Forbidden错误,都会被拦截并返回403 - 不会影响其他错误的处理流程,非
Forbidden的错误依然按SvelteKit默认方式返回(比如500)
内容的提问来源于stack exchange,提问作者Cédric Van Rompay
相关产品推荐
相关产品推荐

