koa 框架对cookie的操作也有封装。而且api也相当的简单。
我们可以根据Context提供的两个方法来对cookie进行访问和修改。
ctx.cookies.get(name, [options])
获得 cookie 中名为 name 的值,options 为可选参数:
- 'signed': 如果为 true,表示请求时 cookie 需要进行签名。
ctx.cookies.set(name, value, [options])
设置 cookie 中名为 name 的值,options 为可选参数:
- signed: 是否要做签名
- expires: cookie 有效期时间
- path: cookie 的路径,默认为 /'
- domain: cookie 的域
- secure: false 表示 cookie 通过 HTTP 协议发送,true 表示 cookie 通过 HTTPS 发送。
- httpOnly: true 表示 cookie 只能通过 HTTP 协议发送
注意:Koa 使用了 Express 的 cookies 模块,options 参数只是简单地直接进行传递。
ctx.cookies用来读写 Cookie。看下面的记录网页浏览次数的例子:
const main = function(ctx) { const n = Number(ctx.cookies.get('view') || 0) + 1; ctx.cookies.set('view', n); ctx.response.body = n + ' views'; }
运行上面的demo,没刷新一次页面,views每次都会计数增加1。
表单处理
Web 应用离不开处理表单。本质上,表单就是 POST 方法发送到服务器的键值对。koa-body模块可以用来从 POST 请求的数据体里面提取键值对。
看下面的 body.js 文件中的代码:
const koaBody = require('koa-body'); const main = async function(ctx) { const body = ctx.request.body; if (!body.name) ctx.throw(400, '.name required'); ctx.body = { name: body.name }; }; app.use(koaBody());
部署这个文件。
$ node body.js
打开另一个命令行窗口,运行下面的命令。
$ curl -X POST --data "name=xttblog" 127.0.0.1:3000 {"name":"xttblog"} $ curl -X POST --data "name" 127.0.0.1:3000 name required
上面代码使用 POST 方法向服务器发送一个键值对,会被正确解析。如果发送的数据不正确,就会收到错误提示。
文件上传
基本上所有的框架都会对文件上传有所封装。koa 框架也不例外。
koa-body模块还可以用来处理文件上传。
看下面的 file.js 文件中的代码:
const os = require('os'); const path = require('path'); const koaBody = require('koa-body'); const main = async function(ctx) { const tmpdir = os.tmpdir(); const filePaths = []; const files = ctx.request.body.files || {}; for (let key in files) { const file = files[key]; const filePath = path.join(tmpdir, file.name); const reader = fs.createReadStream(file.path); const writer = fs.createWriteStream(filePath); reader.pipe(writer); filePaths.push(filePath); } ctx.body = filePaths; }; app.use(koaBody({ multipart: true }));
部署上面的 file.js 文件。
$ node file.js
打开另一个命令行窗口,运行下面的命令,上传一个文件。注意,/path/to/file要更换为真实的文件路径。
$ curl --form upload=@/path/to/file http://127.0.0.1:3000 ["/tmp/file"]
然后我们到/tmp/file文件目录中查看发现文件已经成功上传了。到这里,koa框架的所有内容我们都学习完成了。附上前面几篇文章的地址:
- 闲谈Node.js 的Koa框架和Express框架
- node.js Koa 框架 的基本用法
- node.js Koa 框架 的路由用法
- node.js Koa 框架 的中间件用法
- node.js Koa 框架 的错误处理
- node.js Koa 框架 的Cookies、表单、文件上传功能详解
: » node.js Koa 框架 的Cookies、表单、文件上传功能详解
原创文章,作者:dweifng,如若转载,请注明出处:https://blog.ytso.com/251249.html