Express 是一个构建在 Node.js Web 服务器功能之上的轻量级框架,旨在简化 API 并添加有益的新特性。它通过中间件和路由让我们更容易组织应用程序的功能。它为 Node.js 的 HTTP 对象添加了有用的工具,并有助于渲染动态 HTTP 对象。Express 是 MEAN 栈的一部分,这是一种用于构建快速、健壮且易于维护的生产级 Web 应用的全栈 JavaScript 解决方案。
在本文中,我们将学习如何在 Express JS 中管理 Session 和 Cookie。在 Express JS 中,通常使用两个包来管理 Cookie 和 Session。它们是 ‘express-session‘ 以及用于解析 Cookie 的 ‘cookie-parser‘。
目录
- Express JS 中的 Session
- Express JS 中的 Cookies
实现方法
为了在 Express.js 中管理 Session 和 Cookie,我们将使用 express-session 来存储 Session 数据,使用 cookie-parser 来解析 Cookie。我们需要实现中间件来保护路由,并使用 Session 数据在多个请求之间维护用户状态。
Express JS 中的 Session
Session 是一种在 Web 应用程序的多个请求之间持久化特定用户数据的方法。Express 提供了 ‘express-session‘ 中间件来管理 Session。下面的命令演示了如何使用 npm 在 express 中安装 ‘express-session‘ 模块。
npm install express express-session
现在,我们的 Express JS 应用程序中已经安装了 express-session。下面的代码展示了如何在我们的 Express JS 应用程序中使用这个 express-session 中间件。
const express = require("express");
const session = require("express-session");
const app = express();
app.use(
session({
secret: "your-secret-key",
resave: false,
saveUninitialized: false,
})
);
参数说明:
- secret: 这是一个用于签署 Session ID Cookie 的密钥。它必须是一个强且唯一的密钥。
- resave 即使 Session 没有被修改,也强制将其保存回 Session 存储。
- saveUninitialized: 强制将“未初始化”的 Session 保存到存储中。当 Session 是新的但尚未被修改时,它就是未初始化的。
Express JS 中的 Cookies
Cookie 是存储在客户端浏览器中的小块数据。Express 有一个名为 ‘cookie-parser‘ 的中间件,用于设置 Cookie。下面的命令将在你的应用程序中安装该中间件。
npm install cookie-parser
更新后的 package.json 文件中的依赖项:
"dependencies": {
"cookie-parser": "^1.4.6",
"express": "^4.19.2",
"express-session": "^1.18.0"
}
在你的 Express JS 程序中包含 cookie-parser 中间件函数。
const cookieParser = require(‘cookie-parser‘);
app.use(cookieParser());
项目结构:
!项目结构项目结构
示例: 下面的程序演示了在 Express JS 中 ‘express-session‘ 和 ‘cookie-parser‘ 的用法。
HTML
CODEBLOCK_f4ba0784
JavaScript
“
// index.js
const express = require("express");
const session = require("express-session");
const cookieParser = require("cookie-parser");
const app = express();
// 中间件设置
app.use(
session({
secret: "your-secret-key",
resave: false,
saveUninitialized: false,
})
);
app.use(cookieParser());
// 用于演示的示例用户数据
// 检查用户是否已通过身份验证的中间件
const isAuthenticated = (req, res, next) => {
if (req.session.user) {
next();
} else {
res.redirect("/login");
}
};
// 路由
app.get("/", (req, res) => {
res.send("Welcome to the Expre