使用titbit开发Web后端服务:请求上下文

titbit框架在接收的请求参数,只有一个,被称为请求上下文,就是一个封装了各种请求数据的对象。通过这样的设计,把HTTP/1.1 和 HTTP/2协议的一些差异以及Node.js版本演进带来的一些不兼容做了处理,出于设计和性能上的考虑,对于HTTP2模块,封装请求对象是stream,而不是http模块的IncomingMessage和ServerResponse(封装对象是request和response)。

请求上下文属性和基本描述

属性描述
version 协议版本,字符串类型,为’1.1’ 或 ‘2’。
major 协议主要版本号,1、2、3分别表示HTTP/1.1 HTTP/2 HTTP/3(目前还没有3)。
maxBody 支持的最大请求体字节数,数字类型,默认为初始化时,传递的选项maxBody的值,可以在中间件中根据请求自动设定。
method 请求类型,GET POST等HTTP请求类型,大写字母的字符串。
host 服务的主机名,就是request.headers[‘host’]的值。
protocol 协议字符串,不带冒号,‘https’、‘http’、‘http2’。
path 具体请求的路径。
routepath 实际执行请求的路由字符串。
query url传递的参数。
param 路由参数。
files 上传文件保存的信息。
body body请求体的数据,具体格式需要看content-type,一般为字符串或者对象,也可能是buffer。
port 客户端请求的端口号。
ip 客户端请求的IP地址,是套接字的地址,如果使用了代理服务器,需要检测x-real-ip或是x-forwarded-for消息头获取真正的IP。
headers 指向request.headers。
isUpload 是否为上传文件请求,此时就是检测消息头content-type是否为multipart/form-data格式。
name 路由名称,默认为空字符串。
group 路由分组,默认为空字符串。
reply HTTP/1.1协议,指向response,HTTP/2 指向stream。
request HTTP/1.1 就是http模块request事件的参数IncomingMessage对象,HTTP/2 指向stream对象。
response HTTP/1.1 是http模块的request事件的第二个参数response对象。HTTP/2没有此属性。
box 默认为空对象,可以添加任何属性值,用来动态传递给下一层组件需要使用的信息。
service 用于依赖注入的对象,指向app.service。
res 一个对象包括encoding、body属性,用来暂存返回数据的编码和具体数据。
helper 指向helper模块,提供了一些助手函数,具体参考wiki。
send 函数,用来设置res.body的数据并支持第二个参数作为状态码,默认状态码为200。
moveFile 函数,用来移动上传的文件到指定路径。
status 函数,设置状态码。
setHeader 函数,设置消息头。
getFile 函数,获取上传的文件信息,其实就是读取files属性的信息。

注意:send函数只是设置ctx.res.body属性的值,在最后才会返回数据。和直接进行ctx.res.body赋值没有区别,只是因为函数调用如果出错会更快发现问题,而设置属性值写错了就是添加了一个新的属性,不会报错但是请求不会返回正确的数据。

posted @ 2020-12-25 05:41  简单的机械键盘  阅读(117)  评论(0)    收藏  举报