執行環境套件管理器打包器測試執行器程式碼檢查格式化指南參考部落格意見回饋

Cookie

使用 Bun 內建的 Cookie API 處理 HTTP 請求和響應中的 Cookie。

Bun 內建了用於處理 HTTP 請求和響應中 Cookie 的 API。BunRequest 物件提供了一個 cookies 屬性,即用於讀取和修改 Cookie 的 CookieMap。使用 routes 時,Bun.serve() 會自動跟蹤對 request.cookies.set 的呼叫,並將其應用到響應中。

讀取 cookies

通過 BunRequest 物件上的 cookies 屬性讀取來自請求的 cookies:

TypeScript
Bun.serve({
  routes: {
    "/profile": req => {
      // 訪問請求中的 cookies
      const userId = req.cookies.get("user_id");
      const theme = req.cookies.get("theme") || "light";

      return Response.json({
        userId,
        theme,
        message: "個人資料頁",
      });
    },
  },
});

設定 cookies

要設定 cookies,使用 BunRequest 物件中 CookieMap 的 set 方法。

TypeScript
Bun.serve({
  routes: {
    "/login": req => {
      const cookies = req.cookies;

      // 設定一個帶有多個選項的 cookie
      cookies.set("user_id", "12345", {
        maxAge: 60 * 60 * 24 * 7, // 1 周
        httpOnly: true,
        secure: true,
        path: "/",
      });

      // 新增一個主題偏好 cookie
      cookies.set("theme", "dark");

      // 請求中被修改的 cookies 會自動應用到響應中
      return new Response("登入成功");
    },
  },
});

要刪除 cookie,使用 request.cookies(CookieMap)物件的 delete 方法:

TypeScript
Bun.serve({
  routes: {
    "/logout": req => {
      // 刪除 user_id cookie
      req.cookies.delete("user_id", {
        path: "/",
      });

      return new Response("登出成功");
    },
  },
});

被刪除的 cookie 會作為響應中的 Set-Cookie 標頭,其 Expires 屬性設定為過去的日期,並且 value 為空。