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

SvelteKit导入$lib/server/db.ts至客户端代码报错问题咨询

问题原因与解决方案

你的配置核心问题出在lib/server/db.ts里的顶级await——在模块顶层直接执行await client.connect(),会导致Vite在模块处理过程中,误将这个服务器端模块的加载逻辑牵连到客户端上下文,从而触发Cannot import $lib/server/db.ts into client-side code错误。

虽然最终能输出结果,但这个错误是模块加载时机的异常导致的,需要修正数据库连接的初始化逻辑:

修正后的lib/server/db.ts代码

import { Client } from 'pg';

// 缓存数据库连接实例,避免重复建立连接
let clientInstance;

// 封装连接初始化逻辑,确保只执行一次
async function getDbClient() {
    if (!clientInstance) {
        clientInstance = new Client({ database: 'todos' });
        await clientInstance.connect();
    }
    return clientInstance;
}

export async function getList() {
    const client = await getDbClient();
    return await client.query('select * from items');
}

为什么这样改?

  • 去掉了模块顶层的await,将连接初始化延迟到第一次调用getList时执行
  • 通过缓存clientInstance,避免每次请求都重新建立数据库连接,提升性能
  • 确保所有数据库操作的逻辑都在服务器端安全执行,不会被客户端代码触发

这样修改后,终端和浏览器的错误提示就会消失,同时数据库查询功能保持正常。

内容的提问来源于stack exchange,提问作者RobKohr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 00:07:12