Koa 是一个高效的 Node.js Web 框架,提供了许多实用的功能,例如异步流程控制、中间件机制等等。在 Koa 应用中使用 session 和 cookie 是非常普遍的需求,本文将介绍如何在 Koa 应用中使用 session 和 cookie。
Session 和 Cookie 是什么?
在介绍如何在 Koa 应用中使用 session 和 cookie 之前,我们先来了解一下 session 和 cookie 是什么。
Session: Session 是一种记录客户端状态的技术,在服务器上存储了客户端的信息,每次请求都会从服务器上检索这些信息,以便进行适当的处理。Session 通常用于保持用户登录状态。
Cookie: Cookie 是一种存储在客户端的文本文件,包含了服务器提供的一些数据。Cookie 可以存储在客户端的浏览器或移动设备上,并且可以通过 HTTP 请求和响应传递到服务器和客户端之间。
在 Koa 应用中使用 Session
使用 session 可以方便地实现用户的登录状态。在 Koa 应用中使用 session 需要用到一个中间件 koa-session,这个中间件会在请求处理的时候帮我们管理 session。
安装 koa-session
使用 npm 安装 koa-session:
npm install koa-session
初始化 session
我们需要在 Koa 应用中使用 koa-session 中间件,初始化 session 配置。示例代码如下:
const Koa = require('koa'); const session = require('koa-session'); const app = new Koa(); app.keys = ['my-secret-key']; // 设置 session 的密钥,可以随便指定一个数组 app.use(session(app));
在上面的代码中,我们设置了 session 的密钥为 my-secret-key,需要注意的是这个密钥需要设置为一个不易被猜测的字符串。
使用 session
在 Koa 应用中使用 session 比较简单,我们可以通过 ctx.session 对象来访问 session 数据,也可以通过设置 ctx.session 对象来修改 session 数据。下面是一个使用 session 实现用户登录的示例代码:
// javascriptcn.com 代码示例 // 用户登录 router.post('/login', async (ctx) => { const { username, password } = ctx.request.body; // 验证用户是否存在 const user = await User.findOne({ username }); if (user && user.password === password) { ctx.session.userInfo = { username }; ctx.body = { code: 200, message: '登录成功', }; } else { ctx.body = { code: 400, message: '用户名或密码错误', }; } }); // 获取用户信息 router.get('/user', async (ctx) => { const { userInfo } = ctx.session; if (!userInfo) { ctx.body = { code: 401, message: '未登录', }; } else { ctx.body = { code: 200, data: { username: userInfo.username, }, }; } });
在 Koa 应用中使用 Cookie
使用 cookie 可以方便地实现一些功能,比如记录用户的偏好设置、显示用户最近浏览过的商品等。在 Koa 应用中使用 cookie 需要用到一个中间件 koa-cookie,这个中间件会在请求处理的时候帮我们管理 cookie。
安装 koa-cookie
使用 npm 安装 koa-cookie:
npm install koa-cookie
设置 cookie
我们可以通过设置 ctx.cookies.set() 方法来设置 cookie。示例代码如下:
// javascriptcn.com 代码示例 // 添加一条记录 router.post('/add-record', async (ctx) => { const { record } = ctx.request.body; const { userInfo } = ctx.session; if (!userInfo) { ctx.body = { code: 401, message: '未登录', }; return; } const username = userInfo.username; let records = ctx.cookies.get('records'); if (records) { records = JSON.parse(records); } else { records = []; } records.unshift({ username, record }); ctx.cookies.set('records', JSON.stringify(records), { maxAge: 1000 * 60 * 60 * 24 * 30 }); ctx.body = { code: 200, message: '添加成功', }; });
在上面的代码中,我们通过设置 ctx.cookies.set() 方法来设置 cookie,第一个参数是 cookie 的名称,第二个参数是 cookie 的值,第三个参数是 cookie 的选项。在这个示例中,我们设置了 cookie 的最大存活时间为 30 天。
获取 cookie
我们可以通过 ctx.cookies.get() 方法来获取 cookie。示例代码如下:
// javascriptcn.com 代码示例 // 获取记录列表 router.get('/records', async (ctx) => { const { userInfo } = ctx.session; if (!userInfo) { ctx.body = { code: 401, message: '未登录', }; return; } const username = userInfo.username; const records = ctx.cookies.get('records'); if (!records) { ctx.body = { code: 200, data: [], }; return; } const parsedRecords = JSON.parse(records); const filteredRecords = parsedRecords.filter((record) => record.username === username); const data = filteredRecords.map((record) => record.record); ctx.body = { code: 200, data, }; });
在上面的代码中,我们通过 ctx.cookies.get() 方法来获取 cookie,第一个参数是 cookie 的名称,如果不存在该 cookie,那么这个方法会返回 undefined。
总结
本文介绍了如何在 Koa 应用中使用 session 和 cookie。在 Koa 应用中使用 session 和 cookie 可以方便地实现一些功能,例如用户的登录状态管理、记录用户的偏好设置、显示用户最近浏览过的商品等。学习和掌握这些知识可以让我们写出更加高效、实用、安全的应用程序。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653167ec7d4982a6eb315ab0