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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 07:58:16