使用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赋值没有区别,只是因为函数调用如果出错会更快发现问题,而设置属性值写错了就是添加了一个新的属性,不会报错但是请求不会返回正确的数据。

浙公网安备 33010602011771号