Node.js fastify会话抛出了一些我不理解的东西

Node.js fastify会话抛出了一些我不理解的东西,node.js,fastify,Node.js,Fastify,我对禁食有问题。我正在使用typescript: 从“fastfy”导入fastfy 导入随机字符串=需要(“加密随机字符串”) 导入fastifyCookie=require(“fastify cookie”) 导入fastifySession=require(“fastify会话”) 常量app=fastfy() const safeSecret=randomString({length:32,类型:'base64'}) 应用程序注册(fastifyCookie) app.register(

我对禁食有问题。我正在使用typescript:

从“fastfy”导入fastfy
导入随机字符串=需要(“加密随机字符串”)
导入fastifyCookie=require(“fastify cookie”)
导入fastifySession=require(“fastify会话”)
常量app=fastfy()
const safeSecret=randomString({length:32,类型:'base64'})
应用程序注册(fastifyCookie)
app.register(FastfySession,{secret:safeSecret,saveUninitialized:true,cookie:{secure:false,httpOnly:true,sameSite:false,maxAge:60*60})
app.addHook('preHandler'),(请求、回复、下一步)=>{
request.sessionData={userId:String,name:String,email:String,password:String,loggedOn:Date};
next();
})
app.get(“/”,(请求,回复)=>{
让oldName=req.session.sessionData.name
req.session.sessionData.name=randomString({length:32,类型:'base64'})
回复.发送(“名称:”+req.session.sessionData.name+“旧名称:”+oldName)
})
app.get('/showmename',(请求,回复)=>{
reply.send(“name:+req.session.sessionData.name”)
})
app.listen(3000)
代码可以工作,但是,当我首先转到localhost/时,它会显示我的随机名称,但下面的代码是oldname。showmename和oldname说的完全一样

name:function String(){[native code]}

我做错什么了吗?因为当我转到localhost/showmename时,firefox的cookie editor插件会向我显示与localhost/

完全相同的会话cookie,会话id与localhost/

相同,
preHandler
钩子会在每次请求时运行,所以每次都会覆盖会话数据:

app.addHook('preHandler',(请求,回复,下一步)=>{
request.sessionData={userId:String,name:String,email:String,password:String,loggedOn:Date};
next();
})
因此,
name
是将其字符串化为输出的
String
构造函数

您应该检查会话:

app.addHook('preHandler',(请求,回复,下一步)=>{
if(!request.session.sessionData){
request.session.sessionData={userId:String,name:String,email:String,password:String,loggedOn:Date}
}
下一个()
})
那就行了


无论如何,我会避免将JSON属性设置为
String()
构造函数。

您好,谢谢,我通过在会话中使用文件存储修复了它,但是无论如何,您的回答也很有用!