Cloudflare Workers+Hono+Bun如何全局访问.dev.vars环境变量
解决方法
针对你在Cloudflare Workers + Hono + Bun项目中全局初始化Appwrite Client并访问.dev.vars环境变量的需求,以下是具体实现方案:
核心逻辑说明
本地开发时,Bun会自动读取.dev.vars中的变量并注入到import.meta.env对象中;部署到Cloudflare Workers时,只需在wrangler.toml中配置对应变量绑定,即可通过相同方式访问。我们可以利用这一特性,在路由处理器外全局初始化Client,实现多路由复用。
1. 完整代码实现
import { Hono } from "hono"; import { Client, Users } from "appwrite"; // 定义环境变量类型,给TypeScript提供类型提示(可选但推荐) type Env = { APPWRITE_ENDPOINT: string; APPWRITE_PROJECT_ID: string; APPWRITE_API_KEY: string; }; const app = new Hono<{ Env: Env }>(); // 全局初始化Appwrite Client,添加变量存在校验避免运行时错误 const initAppwriteClient = () => { const endpoint = import.meta.env.APPWRITE_ENDPOINT; const projectId = import.meta.env.APPWRITE_PROJECT_ID; const apiKey = import.meta.env.APPWRITE_API_KEY; if (!endpoint || !projectId || !apiKey) { throw new Error("Appwrite环境变量未正确配置,请检查.dev.vars或wrangler.toml"); } return new Client() .setEndpoint(endpoint) .setProject(projectId) .setKey(apiKey); }; // 全局实例化Client,所有路由共享该实例 const appwriteClient = initAppwriteClient(); // 路由中直接复用全局Client app.get("/users", async (c) => { const users = new Users(appwriteClient); // 注意:Appwrite方法为异步,必须使用await const userList = await users.list(); return c.json(userList); }); // 其他路由同样可以直接复用client实例 app.get("/health", (c) => { return c.json({ status: "ok", clientInitialized: !!appwriteClient }); }); export default app;
2. 部署配置(Cloudflare Workers)
部署前需在wrangler.toml中添加生产环境变量绑定,确保线上环境能获取到配置:
[vars] APPWRITE_ENDPOINT = "你的Appwrite服务端点" APPWRITE_PROJECT_ID = "你的Appwrite项目ID" APPWRITE_API_KEY = "你的Appwrite API密钥"
关键注意事项
- 全局Client会在Worker启动时创建一次,所有请求共享该实例,符合性能优化需求
- 变量校验逻辑能提前暴露配置问题,避免线上静默报错
- Appwrite的大部分方法为异步,路由处理器必须添加
async/await
内容的提问来源于stack exchange,提问作者Kako
相关产品推荐
相关产品推荐

