SvelteKit新版本:迁移至hook.js后无法重定向求解决方案
SvelteKit hook中实现重定向的解决方案
明确hooks分工:SvelteKit 1.0+版本后,hooks拆分为服务器端hooks(hooks.server.js)和客户端hooks(hooks.client.js),重定向逻辑必须放在服务器端hooks里实现,客户端hooks无法直接处理路由重定向。
服务器端重定向的正确写法:
导入SvelteKit提供的redirect函数,在handle函数中判断触发条件后抛出重定向即可,示例代码:import { redirect } from '@sveltejs/kit'; export async function handle({ event, resolve }) { // 自定义重定向判断逻辑,比如旧路径跳转新路径 if (event.url.pathname === '/legacy-page') { // 301为永久重定向,也可使用302临时重定向 throw redirect(301, '/new-page'); } // 正常处理请求流程 const response = await resolve(event); return response; }客户端触发重定向的处理方式:
如果原type="module"脚本是客户端侧逻辑,可在+page.js/+layout.js的load函数中使用goto方法,或者在客户端hooks里调用goto:import { goto } from '$app/navigation'; export function handleClientLoad({ event }) { if (event.url.pathname === '/client-legacy') { goto('/client-new'); } }注意事项:
不要把服务器端重定向逻辑放在客户端hooks里,否则会失效;同时确保hooks文件路径正确(src/hooks.server.js或src/hooks.client.js),旧版本的单一hook.js已被拆分,新版本建议使用拆分后的文件结构。
内容的提问来源于stack exchange,提问作者LukasGur
相关产品推荐
相关产品推荐

