上下文(Context)

此系列文章的应用示例已发布于 GitHub: koa-docs-Zh-CN. 可以 Fork 帮助改进或 Star 关注更新. 欢迎 Star.

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

每个 请求都将创建一个 Context,并在中间件中作为接收器引用,或者 ctx 标识符,如以下代码片段所示:

app.use(async ctx => {ctx; // 这是 Contextctx.request; // 这是 koa Requestctx.response; // 这是 koa Response
});

为方便起见许多上下文的访问器和方法直接委托给它们的 ctx.requestctx.response ,不然的话它们是相同的。
例如 ctx.typectx.length 委托给 response 对象,ctx.pathctx.method 委托给 request

API

Context 具体方法和访问器.

ctx.req

Node 的 request 对象.

ctx.res

Node 的 response 对象.

绕过 Koa 的 response 处理是 __不被支持的__. 应避免使用以下 node 属性:

  • res.statusCode
  • res.writeHead()
  • res.write()
  • res.end()

ctx.request

koa 的 Request 对象.

ctx.response

koa 的 Response 对象.

ctx.state

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

ctx.state.user = await User.find(id);

ctx.app

应用程序实例引用

ctx.cookies.get(name, [options])

通过 options 获取 cookie name:

  • signed 所请求的cookie应该被签名

koa 使用 cookies 模块,其中只需传递参数。

ctx.cookies.set(name, value, [options])

通过 options 设置 cookie namevalue :

  • maxAge 一个数字表示从 Date.now() 得到的毫秒数
  • signed cookie 签名值
  • expires cookie 过期的 Date
  • path cookie 路径, 默认是'/'
  • domain cookie 域名
  • secure 安全 cookie
  • httpOnly 服务器可访问 cookie, 默认是 true
  • overwrite 一个布尔值,表示是否覆盖以前设置的同名的 cookie (默认是 __false__). 如果是 true, 在同一个请求中设置相同名称的所有 Cookie(不管路径或域)是否在设置此Cookie 时从 Set-Cookie 标头中过滤掉。

koa 使用传递简单参数的 cookies 模块。

ctx.throw([status], [msg], [properties])

Helper 方法抛出一个 .status 属性默认为 500 的错误,这将允许 Koa 做出适当地响应。

允许以下组合:

ctx.throw(400);
ctx.throw(400, 'name required');
ctx.throw(400, 'name required', { user: user });

例如 ctx.throw(400, 'name required') 等效于:

const err = new Error('name required');
err.status = 400;
err.expose = true;
throw err;

请注意,这些是用户级错误,并用 err.expose 标记,这意味着消息适用于客户端响应,这通常不是错误消息的内容,因为您不想泄漏故障详细信息。

你可以根据需要将 properties 对象传递到错误中,对于装载上传给请求者的机器友好的错误是有用的。这用于修饰其人机友好型错误并向上游的请求者报告非常有用。

ctx.throw(401, 'access_denied', { user: user });

koa 使用 http-errors 来创建错误。

ctx.assert(value, [status], [msg], [properties])

!value 时,Helper 方法抛出类似于 .throw() 的错误。这与 node 的 assert() 方法类似.

ctx.assert(ctx.state.user, 401, 'User not found. Please login!');

koa 使用 http-assert 作为断言。

ctx.respond

为了绕过 Koa 的内置 response 处理,你可以显式设置 ctx.respond = false;。 如果您想要写入原始的 res 对象而不是让 Koa 处理你的 response,请使用此参数。

请注意,Koa 支持使用此功能。这可能会破坏 Koa 中间件和 Koa 本身的预期功能。使用这个属性被认为是一个 hack,只是便于那些希望在 Koa 中使用传统的 fn(req, res) 功能和中间件的人。

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()

Response 别名

以下访问器和 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=

如果这篇文章对您有帮助, 感谢 下方点赞 或 Star GitHub: koa-docs-Zh-CN 支持, 谢谢.

Koa v2.x 中文文档 上下文(Context)相关推荐

  1. Springboot 中文文档 —— Actuator

    文章目录 1 **启用** 2 **端点(endpoints)** 2.1 启用端点 2.2 公开端点 2.3 保护HTTP端点 2.4 配置端点缓存 2.5 配置 /actuator 路径 2.6 ...

  2. Spring Security中文文档

    Spring Security中文文档 来源:https://www.springcloud.cc/spring-security.html#overall-architecture 作者 Ben A ...

  3. springboot中文文档_登顶 Github 的 Spring Boot 仓库!艿艿写的最肝系列

    源码精品专栏 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 My ...

  4. Android 3.0 r1 API中文文档(107) —— AsyncPlayer

    一.结构 public class AsyncPlayer extends Object java.lang.Object android.media.AsyncPlayer 二.概述 播放一个连续( ...

  5. React-Redux 中文文档

    介绍 快速开始 React-Redux是Redux的官方React绑定库.它能够使你的React组件从Redux store中读取数据,并且向store分发actions以更新数据 安装 在你的Rea ...

  6. Beetl2.7.13 中文文档

    ## Beetl2.7.13 中文文档 ### 1. 什么是Beetl Beetl目前版本是2.7.13,相对于其他java模板引擎,具有功能齐全,语法直观,性能超高,以及编写的模板容易维护等特点.使 ...

  7. Spring Cloud Dalston.RELEASE中文文档

    Spring Cloud Dalston.RELEASE中文文档 Spring Cloud 目录 特性 云原生应用程序 Spring Cloud上下文:应用程序上下文服务 引导应用程序上下文 应用程序 ...

  8. Tomcat7中文文档

    2019独角兽企业重金招聘Python工程师标准>>>   Tomcat7中文文档   注:本文根据tomcat官网(tomcat.apache.org)tomcat7.0官方文档整 ...

  9. Backbone.js(1.1.2) API中文文档

    2019独角兽企业重金招聘Python工程师标准>>> Backbone.Events(事件) Events 是一个可以融合到任何对象的模块, 给予 对象绑定和触发自定义事件的能力. ...

最新文章

  1. 【论文速读】城市自动驾驶应用的概率语义地图
  2. TestStack.White安装详解
  3. 《树莓派实战秘籍》——2.7 技巧27尝试Occidentalis:为(高级)教育目的的树莓派发行版...
  4. jsforeach异步的问题_js中forEach回调同异步题目
  5. Flash MX 2004 中的文本遮罩
  6. 创建 OVS vlan100 netwrok - 每天5分钟玩转 OpenStack(137)
  7. 深入理解Java虚拟机运行时数据区
  8. 使用php生成条形码
  9. 洛谷 P4093 [HEOI2016/TJOI2016]序列(Cdq+dp)
  10. PCB工程的BOM表设置隔行隔列显示不同颜色操作方法
  11. mysql从一加到100_MYSQL用存储过程求1到100累加
  12. 一般椭圆方程表示的椭圆的绘制
  13. android11息屏显示,Android 11系统锁屏做出改善:不再显示专辑封面
  14. 碧蓝航线皇家巡游服务器更新维护,碧蓝航线更新公告
  15. 四级地址库 国家标准的行政区划代码 省市区街道
  16. 【DV】arbiter 的验证思路
  17. BFS广搜例题,问题引入 --- 阿狗荒岛逃生系列(其一)
  18. Shell小干货学到就不亏
  19. 计算机弹钢琴游戏,节奏弹钢琴
  20. 架构师成长之路(5)--如何获取知识(方法)

热门文章

  1. pandas合并groupby_Pandas中级技巧-数据的灵活运算
  2. 传递function_JS中!function(){}()的理解
  3. 多个浏览器同时访问mysql_48- 多线程启动多个不同浏览器
  4. 20210627:力扣第247周周赛(上)
  5. js中src赋值理解
  6. VB实现可执行文件运行时自删除
  7. 最高76%破解成功率!GAN已经能造出“万能指纹”,你的手机还安全吗?
  8. 英特尔AIDC2018:神经计算棒二代从天而降,软硬生态合作圈尽露锋芒
  9. 打车平台Lyft获Magna 2亿美元投资,携手打造自动驾驶汽车
  10. dubbo-monitor-simple-2.5.3-assembly 简易监控中心安装