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

HTML5 herman 154浏览 0评论

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

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