# Express 集成 (/docs/integrations/express)

将 Better Auth 集成到 Express 中。



本指南将向你展示如何将 Better Auth 集成到 [express.js](https://expressjs.com/) 中。

开始之前，确保你已经配置了 Better Auth 实例。如果还没有，请查看[安装](/docs/installation)。

<Callout>
  注意 CommonJS（cjs）不受支持。请通过 `package.json` 中设置 `"type": "module"` 或配置 `tsconfig.json` 使用 ES 模块来改用 ECMAScript 模块（ESM）。
</Callout>

### 挂载处理器 [#挂载处理器]

为了让 Better Auth 处理请求，我们需要将处理器挂载到一个 API 路由上。创建一个 catch-all 路由来管理所有对 `/api/auth/*` 的请求（ExpressJS v4）或 `/api/auth/*splat` 的请求（ExpressJS v5），或者使用你在 Better Auth 选项中指定的任意路径。

<Callout type="warn">
  在诸如 `express.json()` 的请求体解析中间件之前挂载 Better Auth 处理器。请求体解析器会在将控制权传递给下一个处理器之前，消耗传入的请求流。
</Callout>

```ts title="server.ts"
import express from "express";
import { toNodeHandler } from "better-auth/node";
import { auth } from "./auth";

const app = express();
const port = 3005;

app.all("/api/auth/*", toNodeHandler(auth)); // 适用于 ExpressJS v4
// app.all("/api/auth/*splat", toNodeHandler(auth)); // 适用于 ExpressJS v5 

// Mount body-parsing middleware after the Better Auth handler.
app.use(express.json());

app.listen(port, () => {
	console.log(`示例应用正在监听端口 ${port}`);
});
```

完成设置后，启动服务器。Better Auth 即可使用。你可以向 `/ok` 端点（`/api/auth/ok`）发送一个 `GET` 请求，以验证服务器是否正在运行。

### CORS 配置 [#cors-配置]

要在集成 Better Auth 时为 Express 服务器添加 CORS（跨域资源共享）支持，你可以使用 `cors` 中间件。以下是一个更新后的示例，展示如何为服务器配置 CORS：

```ts
import express from "express";
import cors from "cors"; // 导入 CORS 中间件
import { toNodeHandler, fromNodeHeaders } from "better-auth/node";
import { auth } from "./auth";

const app = express();
const port = 3005;

// 配置 CORS 中间件
app.use(
  cors({
    origin: "http://your-frontend-domain.com", // 替换为你的前端域名
    methods: ["GET", "POST", "PUT", "DELETE"], // 指定允许的 HTTP 方法
    credentials: true, // 允许携带凭据（cookies，授权头等）
  })
);
```

### 获取用户会话 [#获取用户会话]

要获取用户的会话信息，你可以使用 `auth` 对象提供的 `getSession` 方法。该方法需要以特定格式传入请求头。为了简化这一过程，Better Auth 提供了一个 `fromNodeHeaders` 辅助函数，将 Node.js 请求头转换为 Better Auth 期望的格式（`Headers` 对象）。

下面是如何在 Express 路由中使用 `getSession` 的示例：

```ts title="server.ts"
import { fromNodeHeaders } from "better-auth/node";
import { auth } from "./auth"; // 你的 Better Auth 实例

app.get("/api/me", async (req, res) => {
 	const session = await auth.api.getSession({
      headers: fromNodeHeaders(req.headers),
    });
	return res.json(session);
});
```

