Bun 提供了用于处理 HTTP 请求和响应中 cookies 的内置 API。BunRequest 对象包含一个 cookies 属性,提供 CookieMap 用于轻松访问和操作 cookies。当使用 routes 时,Bun.serve() 自动跟踪 request.cookies.set 并将它们应用到响应。
读取 cookies
使用 BunRequest 对象上的 cookies 属性从传入请求中读取 cookies:
ts
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 方法。
ts
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("登录成功");
},
},
});Bun.serve() 自动跟踪请求中修改的 cookies 并将它们应用到响应。
删除 cookies
要删除 cookie,使用 request.cookies(CookieMap)对象上的 delete 方法:
ts
Bun.serve({
routes: {
"/logout": req => {
// 删除 user_id cookie
req.cookies.delete("user_id", {
path: "/",
});
return new Response("已成功登出");
},
},
});删除的 cookies 会成为响应上的 Set-Cookie 头,maxAge 设置为 0,value 为空。