Session 是 Web 应用程序中管理用户状态的一种方法。在 Express.js 中,使用 Session 可以方便地存储用户的登录状态、购物车、喜好设置等信息,以便于用户在多次请求之间访问这些数据。在本篇文章中,我们将学习如何在 Express.js 中设置和使用 Session。
安装和配置 session 中间件
在使用 Session 之前,需要先安装和配置相应的中间件。我们可以使用以下命令安装 express-session
中间件:
npm install express-session --save
然后在 Express.js 的主文件中引入和配置 express-session
中间件:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ------- - --------------------------- ----- --- - ---------- ----------------- ------- ------------------ ------- ------ ------------------ ---- ----
上面的代码中,secret
属性是一个用于生成 Session ID 的密码,可以任意设置。resave
和 saveUninitialized
属性是两个 Boolean 值,分别表示在每个请求响应完毕后是否强制保存 Session 和初始化 Session 对象。通常将它们都设置为 false
。
在路由中设置和获取 Session
在 Express.js 中存储和访问 Session 很简单。在路由中添加以下代码:
-- -------------------- ---- ------- ----------------- ----- ---- -- - -------------------- - ---------- --------------- ----------- --- ------------------- ----- ---- -- - ----- -------- - --------------------- -- ---------- - ----------------- ----- -------------- - ---- - ---------------- ----- -------- - ---
上面的代码中,/login
路由将用户名存储在 Session 中,/profile
路由从 Session 中读取用户名并作为欢迎信息返回给用户。如果 Session 中不存在用户名,则提示用户先登录。
Session 的默认存储方式
默认情况下,Express.js 中的 Session 是内存存储的。这意味着当您关闭 Node.js 服务器时,所有 Session 对象都将丢失。因此,在生产环境下,我们需要将 Session 存储到数据库或其他第三方存储服务中。
使用 Redis 存储 Session
Redis 是一种流行的内存数据库,可用于存储 Session 数据。我们可以使用 connect-redis
模块将 Session 存储到 Redis 中。以下是引入和配置 Redis Session 存储的示例代码:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ------- - --------------------------- ----- ---------- - ---------------------------------- ----- --- - ---------- ----- ----------- - -- --- ----------- ----------------- ------- ------------------ ------- ------ ------------------ ----- ------ --- ------------ ------- ----------- -- ----
上面代码中,我们引入 connect-redis
模块并使用 RedisStore
构造函数来创建 Redis 存储实例。然后将其传递给 session
中间件的 store
属性,以代替默认的内存存储。
总结
Session 是 Web 应用程序中管理用户状态的一个重要抽象。在 Express.js 中使用 Session 很简单,只需要安装和配置相应的中间件,然后在路由中进行设置和获取。在生产环境中,我们需要使用第三方存储服务(比如 Redis)来存储 Session 数据,以免丢失。希望这篇文章对您在使用 Express.js 中的 Session 产生了帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65b6fdd5add4f0e0fff9a7ec