很多情况,我们都需要根据请求的详细信息来进行逻辑处理,我们可以使用 Request 的实例来进行请求相关操作。
在控制器中,可以使用依赖注入来获取 Request 实例:
import { Controller, Get, Request } from '@tiger/common';
@Controller('/posts')
export class PostController {
@Get()
index(request: Request) {
console.log(request)
}
}
可以通过 Request 实例获取当前请求的信息
request.getHeaders() / request.headers请求消息头对象。消息头的名称和值的键值对。 消息头的名称都是小写的。
// 打印类似以下:
//
// { 'user-agent': 'curl/7.22.0',
// host: '127.0.0.1:8000',
// accept: '*/*' }
console.log(request.getHeaders());
request.getHeader(name) / request.get(name)根据 name 获取消息头,不区分大小写
// 打印类似以下:
// 'application/json'
console.log(request.getHeader('accept'))
request.getBody() / request.body获取请求体 body
框架默认启用
body解析,如果不需要可以在入口文件使用app.disableBodyParser()来关闭该功能
request.getFiles() / request.files获取请求发送文件列表
request.getMethod() / request.method获取请求方法。
请求方法为字符串。 示例:'GET'、 'DELETE'。
request.getLength() / request.length请求消息头的 Content-Length 的值或者 undefiend
request.getUrl() / reuqest.url请求的 URL 字符串。 它仅包含实际 HTTP 请求中存在的 URL。
例如请求地址: GET /status?name=tiger HTTP/1.1
则 request.url 的值等于 /status?name=tiger
request.getOrigin() / request.origin获取 URL 的来源,包括 protocol 和 host
request.getHref() / request.href获取完整的请求URL,包括 protocol,host 和 url
request.getPath() / request.path请求路径名。
request.getQuery() / request.query根据 ? 获取原始查询对象
request.getQuerystring() / request.querystring根据 ? 获取原始查询字符串 (结果不包含 ?)
request.getSearch() / request.search根据 ? 获取原始查询字符串 (结果包含 ?)
request.getProtocol() / request.protocol获取请求协议: http 或者 https
request.getHost() / request.host获取请求的 host
request.getType() / request.type获取请求 Content-Type 不含参数 charset
request.accepts(types)返回最佳匹配的 types,否则为 false。 type 值可能是一个或多个 mime 类型的字符串,如 application/json,扩展名称如 json,或数组 ["json", "html", "text/plain"]。
// Accept: text/html
request.accepts('html');
// => "html"
// Accept: text/*, application/json
request.accepts('html');
// => "html"
request.accepts('text/html');
// => "text/html"
request.accepts('json', 'text');
// => "json"
request.accepts('application/json');
// => "application/json"
request.acceptsEncodings(encodings)返回最佳匹配的 Accept-Encoding,否则为 false
应该将identity 作为编码之一
// Accept-Encoding: gzip
request.acceptsEncodings('gzip', 'deflate', 'identity');
// => "gzip"
request.acceptsEncodings(['gzip', 'deflate', 'identity']);
// => "gzip"
request.acceptsCharsets(charsets)返回最佳匹配的 charsets,否则为 false。
// Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5
request.acceptsCharsets('utf-8', 'utf-7');
// => "utf-8"
request.acceptsCharsets(['utf-7', 'utf-8']);
// => "utf-8"
request.acceptsLanguages(langs)返回最佳匹配的 langs,否则为 false。
// Accept-Language: en;q=0.8, es, pt
request.acceptsLanguages('es', 'en');
// => "es"
request.acceptsLanguages(['en', 'es']);
// => "es"
框架封装了用于判断常用的请求方法的方式
request.isGet()判断请求是否 GET 类型
request.isPost()判断请求是否 POST 类型
request.isPut()判断请求是否 PUT 类型
request.isPatch()判断请求是否 PATCH 类型
request.isDelete()判断请求是否 DELETE 类型
request.isHead()判断请求是否 HEAD 类型
request.isOptions()判断请求是否 OPTIONS 类型
Request#getParam([name [,default]])请求对象提供了 getParam 和 getParams 方法来获取变量值:
getParam方法可以获取body,url参数的输入变量,所有参数可以通过getParam方法统一获取
const { Controller, Get } = require('@tiger/common')
@Controller('posts')
class PostController {
@Get(':id')
show(request: Request, id: number) {
// 获取 name 参数,如未获取到则默认返回值 tiger
const name = request.getParam('name', 'tiger')
// 获取所有输入变量
const all = request.getParams()
}
}
const { Controller, Get } = require('@tiger/common')
@Controller('posts')
class PostController {
@Get(':id')
show(request: Request, id: number) {
const name1 = request.name1
const name2 = request.name2
}
}
通过 only 与 except 方法筛选需要或者不需要的输入变量
import { Controller, Get } from '@tiger/common'
@Controller('posts')
export class PostController {
@Get()
show(request: Request, id: number) {
// 只获取name与age变量
const params1 = request.only(['name', 'age'])
// 排除name与age,获取剩余变量
const params2 = request.except(['name', 'age'])
}
}