TypeError:在 SvelteKit 服务器端渲染中获取失败 - Express 未显示正确的 TypeScript 堆栈跟踪

Mik*_*maa 6 javascript express typescript svelte sveltekit

我正在使用适配器节点检查 SvelteKit SSR 服务器的日志。

我已经自定义了server.js使用Express 而不是 Polka,但不确定这是否重要。

我认为,当fetch()尝试从后端 API 读取数据并由于某种原因失败时,会出现明显的错误。

这是我使用的控制台输出docker

frontend  | TypeError: fetch failed
frontend  |     at fetch (file:///app/build/handler.js:17895:14)
frontend  |     at async Object.fetch (file:///app/build/server/index.js:2273:12)
frontend  |     at async fetch (file:///app/build/server/index.js:991:24)
frontend  |     at async Promise.all (index 0)
frontend  |     at async load (file:///app/build/server/chunks/6-0becfa88.js:8:56)
frontend  |     at async load_data (file:///app/build/server/index.js:1088:16)
frontend  |     at async file:///app/build/server/index.js:1887:18

Run Code Online (Sandbox Code Playgroud)

该堆栈跟踪无法使用,因为它缺少调用的函数/源代码是什么的信息fetch()。不确定这是因为 Node.js / Express 的工作方式,还是因为堆栈的某些部分缺乏 TypeScript 源映射支持或其他原因。SvelteKit 项目有数十个被调用的函数,load()因为每个路由器端点都有这些函数。

有什么方法可以使这些错误以及 SvelteKit 错误处理总体上更具描述性 - 例如显示映射到其 TypeScript 源文件的正确调用者、失败的页面名称、失败的 URL 等等fetch()?这将有助于诊断失败的 API 调用可能出现的问题的根本问题。

Col*_*nta 3

问题可能是缺少sourcemap

当 SvelteKit 构建你的应用程序时,它会将你的代码分成几个块,这会导致错误堆栈跟踪不可用。

有一种方法可以再次启用源映射,您可以在您的项目中尝试一下,看看它是否有效。

  1. 修改vite.config.xx文件,添加以下配置:
const config = {
  ...
  build:{
    sourcemap: true // Config vite to generate sourcemap when bundling.
  },
  ...
}
Run Code Online (Sandbox Code Playgroud)
  1. 启动节点时添加sourcemapflag,例如:
node index.js --enable-source-maps
Run Code Online (Sandbox Code Playgroud)

这应该使您的堆栈跟踪指向您的src而不是build. 您可以尝试检查您的项目是否仍在打印无意义的堆栈跟踪。