在现有SvelteKit项目引入EdgeDB遇初始化错误求助
解决SvelteKit中EdgeDB初始化错误的方案
问题核心
执行edgedb project init后仍报错ClientConnectionError: Found 'edgedb.toml' but the project is not initialized,说明EdgeDB客户端未正确识别项目的初始化状态,大概率是初始化不完整、生成文件缺失或连接配置存在问题。
具体解决步骤
1. 重新初始化EdgeDB项目
强制重新执行初始化流程,确保数据库实例与项目完全绑定:
edgedb project init --reinit
执行过程中留意是否有实例创建、迁移执行的报错,若有根据提示修复(比如端口占用、权限问题)。
2. 生成EdgeQL-JS类型文件
SvelteKit别名指向的dbschema/edgeql-js是自动生成的类型文件目录,必须确保它存在:
edgedb generate edgeql-js
执行后检查dbschema目录下是否出现edgeql-js文件夹,若未生成,先执行edgedb upgrade升级CLI版本后再重试。
3. 显式配置客户端连接路径
默认的createClient()可能在SvelteKit服务器环境下无法自动定位项目根目录,显式指定项目路径:
修改lib/db/edgedb.ts:
import { createClient } from 'edgedb' export const client = createClient({ projectDir: process.cwd() // 指向项目根目录,确保读取到edgedb.toml })
4. 验证EdgeDB实例状态
确保EdgeDB实例处于运行状态:
edgedb instance status
若实例未启动,执行:
edgedb instance start
5. 排查别名与导入问题
暂时替换SvelteKit别名,用相对路径导入测试,排除别名配置错误:
在routes/test/+page.server.ts中修改导入:
import e from '../../dbschema/edgeql-js';
若能正常导入,说明别名配置可能存在路径问题,重新检查svelte.config.ts中的别名路径是否正确。
额外提示
你的代码中selectPosts.run(client)未使用await,会导致异步查询未完成就返回响应,后续若需要返回查询结果,需修改为:
let posts = await selectPosts.run(client)
内容的提问来源于stack exchange,提问作者rezzrovv
相关产品推荐
相关产品推荐

