You need to enable JavaScript to run this app. 使用express-session时request.session挂载时机及TS类型定义选择
优惠活动
大模型
产品
解决方案
定价
更多

使用express-session时request.session挂载时机及TS类型定义选择

结论

只要你正确在Express应用中注册了express-session中间件,request.session属性本身始终存在,不会为undefined,不管用户是否登录、是否已经创建过会话,因此你的TypeScript类型定义应该选择必选属性的写法。

详细说明

  • 新用户首次访问(无有效会话Cookie)时,express-session会自动在request上挂载一个全新的空session对象,此时你自定义的userId等字段默认为空,但session对象本身是存在的。你可以直接给这个对象赋值属性,赋值后会话才会被持久化到存储中,同时给客户端下发会话Cookie。
  • 已经持有有效会话Cookie的用户访问时,express-session会自动从存储中拉取对应会话数据,填充到request.session对象上。

TypeScript类型优化建议

你不需要给MyContext的session加可选标记,不过建议给SessionData里的自定义字段加可选标记,更符合实际运行逻辑:

import { SessionData } from "express-session";

declare module "express-session" {
  interface SessionData {
    // 未登录时userId为undefined,加可选标记更严谨
    userId?: string;
  }
}
export interface MyContext {
  // session始终存在,设为必选
  session: SessionData;
}

内容的提问来源于stack exchange,提问作者Jake Giri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 17:00:00