Node.js 中如何使用 cookie-parser 和 cookie-session 中间件

阅读时长 5 分钟读完

什么是 cookie?

cookie 是一种存储在用户浏览器中的小文本文件,用于完成网页与浏览器之间的数据交换。一次 HTTP 请求只能传递少量的数据,而 cookie 可以在浏览器与服务器之间存储更多数据,可以使登录状态等信息得以保留。

什么是 cookie-parser?

cookie-parser 是一个 Node.js 的第三方中间件,用于解析浏览器发送的 cookie,并将解析出的 cookie 存储在 req.cookies 对象中,供后续程序使用。

cookie-parser 的安装非常简单:

cookie-parser 的使用方法

首先在 Node.js 中导入 cookie-parser 模块:

在使用 cookie-parser 之前,需要通过 express 的 use 方法将其作为中间件注册到服务器中:

在这之后,当浏览器在请求中传递了 cookie 时,cookie-parser 会自动解析 cookie,并将其以键值对的形式存储在 req.cookies 对象中。

可以在路由方法中通过 req.cookies 访问解析出的 cookie:

以上代码在访问根目录时,判断是否有名为 username 的 cookie。如果有,则将其输出到控制台,否则,向浏览器发送“未设置 cookie”的消息。

什么是 cookie-session?

cookie-session 是一个基于 cookie 的会话中间件,提供了可持久化的会话状态。与 cookie-parser 不同,cookie-session 并不是将数据存储在客户端的 cookie 中,而是将数据加密后存储在服务端的 cookie 中。

cookie-session 也可以通过 NPM 安装:

cookie-session 的使用方法

使用 cookie-session 需要先配置一个密钥(secret),用于加密 cookie 数据。在 Express 中,可以通过 app.use 方法将 cookie-session 注册为中间件:

在上面的代码中,name 参数用于设置 cookie 的名称,keys 参数是用于进行数据加密的秘钥,maxAge 参数用于设置 cookie 的有效时间。

在路由中,可以通过访问 req.session 对象来读取和设置会话状态:

在以上代码中,如果 req.session.username 已经存在,则输出其值。否则,将 username 的值设置为“test-user”。

总结

cookie-parser 和 cookie-session 中间件是 Node.js 处理 cookie 的两个重要工具,它们能够帮助你实现基于 cookie 的用户认证、数据传输等功能。这里只是介绍了 cookie-parser 和 cookie-session 的基础使用方法,更多详细的配置信息和 API 可以查阅官方文档进行了解。

示例代码

-- -------------------- ---- -------
----- ------- - -------------------
----- ------------ - -------------------------
----- ------------- - --------------------------

----- --- - ----------

------------------------

-----------------------
  ----- ----------
  ----- ---------------
  ------- -- - -- - -- - ----
----

------------ ----- ---- -- -
  -- ---------------------- -
    ----------------------------------
  - ---- -
    ------------- ---------
  -

  -- ---------------------- -
    ----------------------------------
  - ---- -
    -------------------- - ------------
  -
---

---------------- -- -- -
  ------------------- --------- -- ---- -------
---

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646c8c20968c7c53b0b823bf

纠错
反馈