Elysia框架中Cookie对象存取值丢失Schema问题咨询
问题原因分析
这问题核心出在HTTP Cookie的本质和Elysia框架的Cookie处理逻辑上:
HTTP协议规定Cookie的值只能是字符串类型——不管你在代码里给Cookie赋值的是对象,Elysia都会自动把它序列化成JSON字符串存储到浏览器里。但反过来读取时,框架默认不会帮你把JSON字符串反序列化为对应Schema的对象,所以拿到的就是原始字符串,自然丢失了Schema结构。
你定义的
profileSchema仅做类型校验用,不会自动处理序列化/反序列化的转换。Elysia只会验证你设置的对象是否符合Schema,或者读取的字符串是否能被解析为符合Schema的对象,但不会主动帮你把读取到的JSON字符串转成对象。
解决思路示例
可以手动反序列化,或者用Elysia的transform功能自动处理:
手动反序列化写法
.get('/', ({ cookie: { profile } }) => { if (!profile.value) { return 'No profile cookie found'; } // 手动把JSON字符串转成对象 const profileObj = JSON.parse(profile.value); const { id, name } = profileObj; return `Profile: ID = ${id}, Name = ${name}`; }, { cookie: t.Cookie({ profile: profileSchema }), })
自动转换写法(用Transform)
.get('/', ({ cookie: { profile } }) => { if (!profile.value) { return 'No profile cookie found'; } const { id, name } = profile.value; // 此时已经是反序列化后的对象 return `Profile: ID = ${id}, Name = ${name}`; }, { cookie: t.Cookie({ profile: t.Transform(profileSchema, { parse: (value) => JSON.parse(value), serialize: (value) => JSON.stringify(value) }) }), })
内容的提问来源于stack exchange,提问作者coool
相关产品推荐
相关产品推荐

