在Cloudflare Worker的处理程序中创建实例时,如何使用Better Auth的服务器端方法?

前端开发 2026-07-09

我在一个 Express.js / Node.js 应用中使用Better Auth,并通过一个 Cloudflare D1绑定 部署。

我的认证设置通过类似Cloudflare Worker的 fetch() 处理程序实现,因为D1数据库绑定(env.DB)只能在那里使用。

这是我当前的 auth.ts 文件:

import { betterAuth } from "better-auth";

export default {
    async fetch(request, env) {
        const auth = betterAuth({
            database: env.DB, // D1 binding, auto-detected
            /// Rest of better auth config
        });

        return auth.handler(request);
    },
} satisfies ExportedHandler<{ DB: D1Database }>;

我需要在服务器端直接调用Better Auth的方法,例如 signUpEmail()

文件如下:

import auth from "../../infrastructure/auth.ts";

export async function signUpWithEmail(
    pseudo: string,
    email: string,
    password: string
) {
    if (!pseudo || !email || !password) {
        throw new Error("Pseudo, email and password are required");
    }

    try {
        const result = await auth.api.signUpEmail({ // here is the problem
            body: {
                name: pseudo,
                email: email,
                password: password,
                display_pseudo: pseudo,
            },
        });

    } catch (error) {
        console.error(`Signup error: ${error}`);
        throw error;
    }
}

auth.api未定义 / TypeScript错误,因为我导出的对象只包含 fetch()

我的约束条件:

  • 由于Cloudflare D1的存在,我需要访问 env.DB 来使用Better Auth。
  • env.DB 仅在请求上下文中可用。
  • 我希望直接在我的服务中使用Better Auth方法(signUpEmailsignInEmail 等)。

我的问题:

  1. 我的 auth.ts 结构对于Cloudflare + Express.js + D1的组合是否正确?
  2. 在这个架构中,暴露/在服务器端使用Better Auth方法的推荐做法是什么?

如果有任何建议或最佳实践,欢迎分享。

解决方案

你收到的错误 auth.api is undefined / TypeScript error, because my exported object only contains fetch(). 是因为你在fetch函数内创建了Better Auth实例。因此它只导出fetch函数,而不是auth函数,所以下面的代码会出现auth.api未定义的错误。

const result = await auth.api.signUpEmail({

你可以改为创建一个共享的auth API实例,如下所示

import { betterAuth } from "better-auth";
export function createAuth(env) {
  return betterAuth({
    database: env.DB,
  });
}

现在你可以在你的函数中复用它

export default {
    async fetch(request, env) {
        const auth = createAuth(env);
        return auth.handler(request);
    },
} satisfies ExportedHandler<{ DB: D1Database }>;
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章