本文为我个人对Koa官网语法介绍的学习笔记,部分小节复制粘贴自官网。
安装Koa,官网有很明确的介绍,直接在项目目录下终端中运行npm i koa就行。

Koa概念目录

  • 1. Koa概念
  • 2. 应用程序
    • 2.1 Koa洋葱模型(级联)
    • 2.2 应用程序设置
    • 2.3 常用的应用程序设置
    • 2.4 错误处理
  • 3. 上下文
    • 3.1 常用API
    • 3.2 Request 别名
    • 3.3 Response 别名
  • 4. 请求(Request)
    • 4.1 API
  • 5. 响应(Response)
    • 5.1 响应头API
    • 5.2 响应状态与响应信息API

1. Koa概念

官网将Koa相关知识分为:

  • 应用(Application)
  • 上下文(Context)
  • 请求(Request)
  • 响应(Responds)

2. 应用程序

Koa应用程序是一个包含一组中间件函数的对象,它是按照类似堆栈的方式组织和执行的。

2.1 Koa洋葱模型(级联)

Koa中间件使用传统的方式级联,使用async/await来实现。下图为Koa的洋葱模型。

参考官网所给示例:

const Koa = require('koa');
const app = new Koa();// loggerapp.use(async (ctx, next) => {await next(); // 请求到达此处后,跳转到下一个中间件x-response-timeconst rt = ctx.response.get('X-Response-Time');console.log(`${ctx.method} ${ctx.url} - ${rt}`);
});// x-response-timeapp.use(async (ctx, next) => {const start = Date.now();await next(); // 请求流执行到此处,跳转到下一个中间件response// response中间件执行完成后,继续执行下面代码。下面代码执行完成后回到上一个中间件回调函数处。const ms = Date.now() - start;ctx.set('X-Response-Time', `${ms}ms`);
});// responseapp.use(async ctx => {ctx.body = 'Hello World'; // 请求流到此处,执行完成,回到上一个中间件回调函数处。
});app.listen(3000);

2.2 应用程序设置

应用程序设置是 app 实例上的属性。

应用程序设置包括:

  • app.env
  • app.keys
  • app.proxy
  • app.proxyIpHeader
  • app.maxIpsCount

应用程序设置有两种方式:

  • 第一种:在初始化app实例时,将设置传递给构造函数;
  • 第二种:初始化app实例完成后,动态的设置app实例上的属性;

2.3 常用的应用程序设置

app.listen():Koa应用程序不是HTTP服务器的1对1展现,因此可以将同一个程序作为HTTP和HTTPS或多个地址,其是下面代码的语法糖:

const http = require('http');
const Koa = require('koa');
const app = new Koa();
http.createServer(app.callback()).listen(3000);

app.callback():返回适用于http.createServer()方法的回调函数用来处理请求,也可以用此回调函数将Koa应用程序挂载到Connect/Express应用程序中。

app.use(function):将括号中的中间件方法添加到此应用程序。app.use()返回this,因此可以链式表达。

app.use(someMiddleware)
app.use(someOtherMiddleware)
app.listen(3000)
// 下面代码效果与上面代码实现效果相同
app.use(someMiddleware).use(someOtherMiddleware).listen(3000)

app.keys:设置签名的 Cookie 密钥。

// 传递给KeyGrip
app.keys = ['im a newer secret', 'i like turtle'];
app.keys = new KeyGrip(['im a newer secret', 'i like turtle'], 'sha256');

app.context:即上下文,从app.context创建ctx的原型,可以通过编辑 app.context 为 ctx 添加其他属性。

2.4 错误处理

默认情况下,将所有错误输出到 stderr,除非 app.silent 为 true。 当 err.status 是 404 或 err.expose 是 true 时默认错误处理程序也不会输出错误。

要执行自定义错误处理逻辑,如集中式日志记录,您可以添加一个 “error” 事件侦听器:

app.on('error', err => {log.error('server error', err)
});

如果在请求/响应期间出现错误,则无法响应客户端,但是Context实例仍然被传递:

app.on('error', (err, ctx) => {log.error('server error', err, ctx)
});

如果发生错误,但是可以响应客户端,且没有数据被写入socket中,则Koa将用“内部服务器错误”(500)进行响应。

3. 上下文

Koa Context 将 node 的 request 和 response 对象封装到单个对象中,为编写 Web 应用程序和 API 提供了许多有用的方法。 这些操作在 HTTP 服务器开发中频繁使用,它们被添加到此级别而不是更高级别的框架,这将强制中间件重新实现此通用功能。

// 每一个请求都将创建一个Context,并且在中间件中作为接收器引用(ctx标识符)
app.use(async ctx => {ctx; // 这是 Contextctx.request; // 这是 koa Requestctx.response; // 这是 koa Response
})

3.1 常用API

ctx.req:Node 的 request 对象;

ctx.res:Node 的 response 对象;

ctx.request:koa 的 Request 对象;

ctx.response:koa 的 Response 对象;

ctx.state:推荐的命名空间,用于通过中间件传递信息和你的前端视图;

ctx.app:应用程序实例引用;

ctx.app.emit:Koa 应用扩展了内部 EventEmitter。ctx.app.emit 发出一个类型由第一个参数定义的事件。对于每个事件,您可以连接 “listeners”,这是在发出事件时调用的函数。

ctx.cookies.get(name, [options]):通过 options 获取 cookie name;

ctx.cookies.set(name, value, [options]):通过 options 设置 cookie name 的 value;

ctx.throw([status], [msg], [properties]):用来抛出一个包含 .status 属性错误的帮助方法,其默认值为 500;

ctx.assert(value, [status], [msg], [properties]):当 !value 时抛出一个类似 .throw 错误的帮助方法。这与 node 的 assert() 方法类似.

3.2 Request 别名

以下访问器和 Request 别名等效:

  • ctx.header
  • ctx.headers
  • ctx.method
  • ctx.method=
  • ctx.url
  • ctx.url=
  • ctx.originalUrl
  • ctx.origin
  • ctx.href
  • ctx.path
  • ctx.path=
  • ctx.query
  • ctx.query=
  • ctx.querystring
  • ctx.querystring=
  • ctx.host
  • ctx.hostname
  • ctx.fresh
  • ctx.stale
  • ctx.socket
  • ctx.protocol
  • ctx.secure
  • ctx.ip
  • ctx.ips
  • ctx.subdomains
  • ctx.is()
  • ctx.accepts()
  • ctx.acceptsEncodings()
  • ctx.acceptsCharsets()
  • ctx.acceptsLanguages()
  • ctx.get()

3.3 Response 别名

  • ctx.body
  • ctx.body=
  • ctx.status
  • ctx.status=
  • ctx.message
  • ctx.message=
  • ctx.length=
  • ctx.length
  • ctx.type=
  • ctx.type
  • ctx.headerSent
  • ctx.redirect()
  • ctx.attachment()
  • ctx.set()
  • ctx.append()
  • ctx.remove()
  • ctx.lastModified=
  • ctx.etag=

4. 请求(Request)

Koa Request 对象是在 node 的原生请求对象之上的抽象,提供了诸多对 HTTP 服务器开发有用的功能。

4.1 API

5. 响应(Response)

Koa Response 对象是在 node 的原生响应对象之上的抽象,提供了诸多对 HTTP 服务器开发有用的功能。

5.1 响应头API

响应头对象:response.headerresponse.headers

响应套接字为:response.socket,指向Node中net.Socket实例;

5.2 响应状态与响应信息API

获取响应状态:response.status,默认情况下,response.status 设置为 404 而不是像 node 的 res.statusCode 那样默认为 200。

设置响应状态:response.status=,常见状态码:

  • 100 “continue”
  • 101 “switching protocols”
  • 102 “processing”
  • 200 “ok”
  • 201 “created”
  • 202 “accepted”
  • 203 “non-authoritative information”
  • 204 “no content”
  • 205 “reset content”
  • 206 “partial content”
  • 207 “multi-status”
  • 208 “already reported”
  • 226 “im used”
  • 300 “multiple choices”
  • 301 “moved permanently”
  • 302 “found”
  • 303 “see other”
  • 304 “not modified”
  • 305 “use proxy”
  • 307 “temporary redirect”
  • 308 “permanent redirect”
  • 400 “bad request”
  • 401 “unauthorized”
  • 402 “payment required”
  • 403 “forbidden”
  • 404 “not found”
  • 405 “method not allowed”
  • 406 “not acceptable”
  • 407 “proxy authentication required”
  • 408 “request timeout”
  • 409 “conflict”
  • 410 “gone”
  • 411 “length required”
  • 412 “precondition failed”
  • 413 “payload too large”
  • 414 “uri too long”
  • 415 “unsupported media type”
  • 416 “range not satisfiable”
  • 417 “expectation failed”
  • 418 “I’m a teapot”
  • 422 “unprocessable entity”
  • 423 “locked”
  • 424 “failed dependency”
  • 426 “upgrade required”
  • 428 “precondition required”
  • 429 “too many requests”
  • 431 “request header fields too large”
  • 500 “internal server error”
  • 501 “not implemented”
  • 502 “bad gateway”
  • 503 “service unavailable”
  • 504 “gateway timeout”
  • 505 “http version not supported”
  • 506 “variant also negotiates”
  • 507 “insufficient storage”
  • 508 “loop detected”
  • 510 “not extended”
  • 511 “network authentication required”

获取响应消息:response.message,将响应的状态消息设置为给定值:response.message=

Koa学习(二)—— Koa概念相关推荐

  1. Koa 学习 02 Koa 实现原理和极简模拟案例

    通过模拟一个极简版本的 Koa 学习实现原理. 初始化项目 # 安装 koa npm i koa 添加启动文件: // app.js const Koa = require('koa')const a ...

  2. Koa 学习 01 Koa 介绍和基本使用(路由、静态资源托管、中间件)

    Koa 介绍 Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造,致力于成为 web 应用和 API 开发领域中的一个更小.更富有表现力.更健壮的基石. 官网:https://k ...

  3. fusionjs 学习二 核心概念

    核心概念 middleware 类似express 的中间件模型(实际上是构建在koa中间件模型上的),但是和koa 的中间件有差异 fusionjs 的中间件同时可以运行在浏览器页面加载的时候 se ...

  4. Koa学习(一)——Koa介绍

    Koa--基于Node.js平台的下一代Web框架. Koa2介绍 1. Koa简介 2. Koa历史版本 3. 应用场景 4. Koa扩展框架 1. Koa简介 Koa 官网 Koa所谓的" ...

  5. 软考高项之学习笔记——质量成本概念

    软考高项之学习笔记--质量成本概念 一.常见混淆概念 二.质量成本相关概念解释 1.质量成本概念 2.一致性成本 3.非一致性成本 三.历年真题 一.常见混淆概念 质量成本.一致性成本.非一致性成本. ...

  6. PyTorch框架学习二十——模型微调(Finetune)

    PyTorch框架学习二十--模型微调(Finetune) 一.Transfer Learning:迁移学习 二.Model Finetune:模型的迁移学习 三.看个例子:用ResNet18预训练模 ...

  7. Docker学习二:Docker镜像与容器

    前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...

  8. 深度学习二(Pytorch物体检测实战)

    深度学习二(Pytorch物体检测实战) 文章目录 深度学习二(Pytorch物体检测实战) 1.PyTorch基础 1.1.基本数据结构:Tensor 1.1.1.Tensor数据类型 1.1.2. ...

  9. webrtc服务器janus通信方法学习二

    webrtc服务器janus通信方法学习二 网关部署了一个客户端可以利用的接口.这个janus.js库以透明的方式使用它,其中与之交流的接口都封装好了,也可以自己使用其他方式进行通信,我不使用js接口 ...

  10. OpenGL入门学习[二] 绘制简单的几何图形

    OpenGL入门学习[二] 本次课程所要讲的是绘制简单的几何图形,在实际绘制之前,让我们先熟悉一些概念. 一.点.直线和多边形 我们知道数学(具体的说,是几何学)中有点.直线和多边形的概念,但这些概念 ...

最新文章

  1. 从配置文件到分布式配置管理QConf
  2. 知识图谱在信息检索中的应用_如何使用知识图谱增强信息检索模型?
  3. Entropy Broker 2.0 发布,加密安全随机数
  4. 一步步用zTree(2)
  5. 快手春节活动奖励未到账,被羊毛党投诉上了全国12315平台
  6. 远程注入【注入分类】
  7. python解释器的提示符是shell嘛_python解释器怎么运行
  8. 深度学习(三十四)对抗自编码网络-未完待续
  9. js判断变量类型是否为字符串,不符合条件则赋值为‘无’
  10. AppUI自动化中的图像识别的使用
  11. C语言—黑客数字雨特效
  12. bzoj5394 [Ynoi2016]炸脖龙 树状数组+拓展欧拉定理
  13. MSP430之仿真器驱动安装问题
  14. git aliases
  15. char在python中什么意思_C语言-char 类型基本概念
  16. Java版Word开发工具Aspose.Words功能解析:查找和替换Word文档中的文本
  17. 【可达编程】 P0815 歌手大赛
  18. Sublime Text 3 的插件安装(完美解决插件安装出错的问题)及常用插件推荐
  19. 职业生涯自我规划五步法
  20. 在平板/手机上运行Linux(无需root),学习Linux命令行。(快速方法+详细图文+Ubuntu举例)

热门文章

  1. Unity 全息影像
  2. 自恢复保险丝规格书参数详解,你不知道的全在这里
  3. 2022-2027年中国苦荞茶饮料行业发展前景及投资战略咨询报告
  4. html中加链接的代码,HTML链接代码
  5. php模拟腾讯微校第三方认证,小程序,对个人公众号进行了一次权限的解放
  6. 【密码学】RSA的攻与防_4.0
  7. 帧中继 通信原理分析
  8. 新病例系列研究心脏手术期间联合运用Masimo SedLine(R)脑功能监护仪与O3(R)局部氧饱和度仪
  9. innerText 和 innerHTML区别
  10. MySQL笔记 07:多表连接查询