Java基础、中级、高级、架构面试资料

node.js Koa 框架 的Cookies、表单、文件上传功能详解

HTML5 herman 5480浏览 0评论
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog2,发送下载链接帮助你免费下载!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云

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 参数只是简单地直接进行传递。

Koa 框架

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框架的所有内容我们都学习完成了。附上前面几篇文章的地址:

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » node.js Koa 框架 的Cookies、表单、文件上传功能详解