Node.js中的HTTP Cookies
Cookies是存储在客户端上并与服务器请求一起发送的小数据。 Cookies具有各种功能,它们可以用于维护会话,并在您的Web应用中添加用户特定功能。为此,我们将使用npm的 cookie-parser 模块,该模块提供了用于解析Cookie的中间件。
首先,将命令提示符的目录设置为项目的根文件夹,并运行以下命令:
npm init
这将要求您提供有关您的应用程序的详细信息,并最终创建一个 package.json 文件。之后运行以下命令,它将安装所需的模块并将它们添加到您的package.json文件中。
npm install express cookie-parser --save
package.json文件如下所示:

然后,我们将通过在根目录的app.js文件中编写以下代码来设置基本的express应用程序。
let express = require('express');
//setup express app
let app = express()
//basic route for homepage
app.get('/', (req, res)=>{
res.send('welcome to express app');
});
//server listens to port 3000
app.listen(3000, (err)=>{
if(err)
throw err;
console.log('listening on port 3000');
});
然后,如果我们运行以下命令:
node app.js
它将在端口3000上启动我们的服务器,如果访问网址:localhost:3000,我们将得到一个显示消息的页面:
**welcome to express app**
这是在启动服务器后的 localhost:3000 页面的屏幕截图:

现在我们已经成功设置好了我们的 express 应用,现在让我们开始处理 cookies。
对于 cookies,我们首先需要在我们的 app.js 文件中导入该模块并像其他中间件一样使用它。
var cookieParser = require('cookie-parser');
app.use(cookieParser());
假设我们有一个用户,我们想要将该用户数据添加到cookie中,那么我们必须使用以下代码将该cookie添加到响应中:
res.cookie(name_of_cookie, value_of_cookie);
这可以通过下面的示例来解释:
let express = require('express');
let cookieParser = require('cookie-parser');
//setup express app
let app = express()
app.use(cookieParser());
//basic route for homepage
app.get('/', (req, res)=>{
res.send('welcome to express app');
});
//JSON object to be added to cookie
let users = {
name : "Ritik",
Age : "18"
}
//Route for adding cookie
app.get('/setuser', (req, res)=>{
res.cookie("userData", users);
res.send('user data added to cookie');
});
//Iterate users data from cookie
app.get('/getuser', (req, res)=>{
//shows all the cookies
res.send(req.cookies);
});
//server listens to port 3000
app.listen(3000, (err)=>{
if(err)
throw err;
console.log('listening on port 3000');
});
所以,如果我们重启服务器并在设置Cookie之前对路由localhost:3000/getuser进行get请求,结果如下:

在向localhost:3000/setuser发送请求后,将向Cookie中添加用户数据,并输出结果如下:

现在,如果我们再次请求localhost:3000/getuser,因为该路由正在使用req.cookies遍历Cookie中的用户数据 req.cookies , 所以输出结果如下:

如果我们在Cookie中推送多个对象,那么我们可以使用 req.cookie.cookie_name 访问特定的Cookie。
添加具有过期时间的Cookie
我们可以添加一个具有一定过期时间的Cookie,即在该时间后,Cookie将被自动删除。为此,在设置Cookie时,我们需要向res.cookie对象传递一个额外的属性。
可以通过以下两种方式之一来实现:
//Expires after 400000 ms from the time it is set.
res.cookie(cookie_name, 'value', {expire: 400000 + Date.now()});
//It also expires after 400000 ms from the time it is set.
res.cookie(cookie_name, 'value', {maxAge: 360000});
销毁Cookie:
我们可以使用以下代码销毁Cookie:
res.clearCookie(cookieName);
现在让我们创建一个注销路由,它将从cookie中销毁用户数据。现在我们的app.js文件如下:
let express = require('express');
let cookieParser = require('cookie-parser');
//setup express app
let app = express()
app.use(cookieParser());
//basic route for homepage
app.get('/', (req, res)=>{
res.send('welcome to express app');
});
//JSON object to be added to cookie
let users = {
name : "Ritik",
Age : "18"
}
//Route for adding cookie
app.get('/setuser', (req, res)=>{
res.cookie("userData", users);
res.send('user data added to cookie');
});
//Iterate users data from cookie
app.get('/getuser', (req, res)=>{
//shows all the cookies
res.send(req.cookies);
});
//Route for destroying cookie
app.get('/logout', (req, res)=>{
//it will clear the userData cookie
res.clearCookie('userData');
res.send('user logout successfully');
});
//server listens to port 3000
app.listen(3000, (err)=>{
if(err)
throw err;
console.log('listening on port 3000');
});
销毁cookie,请发起get请求到以下链接: 用户已退出[/caption]
要检查cookie是否已销毁,请发起get请求到localhost:3000/getuser,您将获得一个空的用户cookie对象。

以上是使用cookie-parser中间件的HTTP cookie的基本用法。cookie可以用于许多方面,如维护会话并根据用户在网站上的先前交易为每个用户提供不同的网站视图。
极客教程