You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SvelteKit hooks中externalFetch函数始终未被调用的问题求解

externalFetch 钩子未触发常见原因及修复方案

1. 钩子放置位置错误

externalFetch(旧版本SvelteKit)/handleFetch(1.0+版本SvelteKit)仅在放置于src/hooks.server.js(或对应.ts后缀文件)时才会被框架自动加载,放在其他文件中不会生效。

2. 版本不兼容导致钩子名失效

SvelteKit 1.0正式版发布后,externalFetch钩子已被正式重命名为handleFetch,如果你的项目依赖版本大于等于1.0,继续使用externalFetch作为函数名不会被触发,需要替换函数名。

3. 调用场景不匹配

该钩子仅能拦截服务端环境发起的、指向外部域名的fetch请求,以下场景不会触发:

  • 客户端侧(如页面onMount生命周期、客户端交互事件中)直接发起的fetch请求
  • 服务端发起的调用本站点内部接口的fetch请求

4. 原有代码逻辑错误

你当前的代码直接通过下标赋值修改Request对象的headers属性,这一写法不符合Fetch API规范:Request实例的headers是只读的Headers对象,需要先克隆实例后调用headers.set方法修改头信息,修正后的代码如下:

// SvelteKit 1.0+ 版本写法,放置于src/hooks.server.js
export async function handleFetch({ request, fetch }) {
    const modifiedRequest = new Request(request);
    modifiedRequest.headers.set('authorization', 'HMAC 12.33');
    console.log('hook headers', modifiedRequest);
    return fetch(modifiedRequest);
}

// SvelteKit 1.0之前旧版本写法,放置于src/hooks.js
export async function externalFetch(request) {
    const modifiedRequest = new Request(request);
    modifiedRequest.headers.set('authorization', 'HMAC 12.33');
    console.log('hook headers', modifiedRequest);
    return fetch(modifiedRequest);
}

补充注意事项

如果触发钩子后请求依然返回异常,需要确认目标外部API是否允许authorization自定义请求头,避免跨域策略拦截你的请求。

内容的提问来源于stack exchange,提问作者Subhendu Pratap Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:09:05