Interactive Playground
当前部署环境只有 2C4G。为了避免构建阶段因 Monaco、Rollup Browser 和 类型分析导致 OOM,这个版本只保留教程内容,不内嵌在线 Playground。
bun run build:full如需完整交互体验,请在更高配置环境执行上面的完整构建命令。
您可以通过使用上下文中的 cookie 来操作 cookies。
import { Elysia } from 'elysia'
new Elysia()
.get('/', ({ cookie: { visit } }) => {
const total = +visit.value ?? 0
visit.value++
return `您已访问 ${visit.value} 次`
})
.listen(3000)Cookie 是一个响应式对象。一旦被修改,响应将会反映出这个变化。
当提供了类型注释时,Elysia 会尝试将其强制转换为相应的值。
import { Elysia } from 'elysia'
new Elysia()
.get('/', ({ cookie: { visit } }) => {
visit.value ??= 0
visit.value.total++
return `您已访问 ${visit.value.total} 次`
}, {
cookie: t.Object({
visit: t.Optional(
t.Object({
total: t.Number()
})
)
})
})
.listen(3000)我们可以使用 cookie schema 来验证和解析 cookie。
我们可以通过其属性名称获取或设置 cookie 属性。
否则,使用 .set() 批量设置属性。
import { Elysia } from 'elysia'
new Elysia()
.get('/', ({ cookie: { visit } }) => {
visit.value ??= 0
visit.value++
visit.httpOnly = true
visit.path = '/'
visit.set({
sameSite: 'lax',
secure: true,
maxAge: 60 * 60 * 24 * 7
})
return `您已访问 ${visit.value} 次`
})
.listen(3000)请查看 Cookie 属性。
我们可以通过调用 .remove() 方法来移除 cookie。
import { Elysia } from 'elysia'
new Elysia()
.get('/', ({ cookie: { visit } }) => {
visit.remove()
return `Cookie 已移除`
})
.listen(3000)Elysia 可以通过以下方式为 cookies 签名以防篡改:
t.Cookie 为每个 cookie 提供 secret。import { Elysia } from 'elysia'
new Elysia({
cookie: {
secret: 'Fischl von Luftschloss Narfidort',
}
})
.get('/', ({ cookie: { visit } }) => {
visit.value ??= 0
visit.value++
return `您已访问 ${visit.value} 次`
}, {
cookie: t.Cookie({
visit: t.Optional(t.Number())
}, {
secrets: 'Fischl von Luftschloss Narfidort',
sign: ['visit']
})
})
.listen(3000)如果提供了多个 secrets,Elysia 会使用第一个 secret 来签名 cookies,并尝试用其余的进行验证。
让我们创建一个简单的计数器,用于跟踪您访问网站的次数。
visit.value 来更新 cookie 值。visit.httpOnly = true。import { Elysia, t } from 'elysia'
new Elysia()
.get('/', ({ cookie: { visit } }) => {
visit.value ??= 0
visit.value++
visit.httpOnly = true
return `您已访问 ${visit.value} 次`
}, {
cookie: t.Object({
visit: t.Optional(
t.Number()
)
})
})
.listen(3000)