📅  最后修改于: 2023-12-03 15:00:40.574000             🧑  作者: Mango
在 Express.js 中,req
对象被用来表示客户端发起的 HTTP 请求。其中的 cookies
和 signedCookies
属性用来操作请求中的 Cookies 数据。
当客户端向服务器发送请求时,可能会携带一些 Cookies 数据,这些数据会被保存在 req.cookies
中。这个属性是一个对象,其中每个键值对代表一个 Cookie,键值对的键是 Cookie 的名称,值是 Cookie 的值。如果请求中不存在任何 Cookies 数据,那么 req.cookies
将是一个空对象 {}
。
以下是一个使用 req.cookies
的简单例子:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
const name = req.cookies.name; // 获取名为 name 的 Cookie
res.send(`Hello, ${name}!`);
});
app.listen(3000, () => console.log('Server running on port 3000'));
与 req.cookies
相比,req.signedCookies
具有额外的功能。为了保证 Cookie 数据在传输过程中不被篡改,可以使用一些加密算法创建一些签名来保护它们。在 Express.js 中,使用 cookie-parser
中间件可以完成这个过程。
通过在 cookie-parser
中设置一个私钥,可以为所有 Cookies 创建签名。当客户端向服务器发送带有签名的 Cookies 数据时,这些数据会被保存在 req.signedCookies
中。
以下是一个使用 req.signedCookies
的简单例子:
const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();
app.use(cookieParser('my secret key'));
app.get('/', (req, res) => {
const name = req.signedCookies.name; // 获取名为 name 的签名 Cookie
res.send(`Hello, ${name}!`);
});
app.listen(3000, () => console.log('Server running on port 3000'));
注意:如果没有为 Cookie 创建签名,那么尝试使用 req.signedCookies
访问没有签名的 Cookie 时,会抛出一个 SignatureVerificationFailed
异常。
以上就是在 Express.js 中使用 req.cookies
和 req.signedCookies
的简单介绍。要深入了解这些属性,请查看 Express.js 官方文档。