这是我参与8月更文挑战的第12天,活动详情查看:8月更文挑战
目录
通过01Hello world的Demo练习,对Nest框架有了初步简单的认识。都知道,Controller功能是负责接收请求,返回响应结果。一个请求发起时,到达对应的controller,主要通过路由机制控制。
- 每个Controller有多个路由
- 不同的路由可以执行同步的操作
路由
请求怎么到达Controller?
通过装饰器设计思路,将路由直接标志在函数头上,实现了去中心化路由。
@Controller('user')
export class UserController {
@Get('getList')
async getAllUser() {
return;
}
@Get(':id')
async getProfile(@Param('id') id) {
return `userId:${id}`;
}
}
@Controller()装饰器,表示指定路径的前缀,如上述例子中前缀设置为user;
@Get()装饰器,表示http请求的方法是Get,当然也是支持Post,Put,Delete等;
因处理程序的路由是通过连接为控制器声明的前缀和请求装饰器中指定的任何路由来确定的。比如上述例子,生成的路由映射:GET /user/getList
路由参数
如例子中的:id,可以通过@Param装饰器访问到路由参数。@Param()用于修饰方法参数(上面示例中的参数),并使路由参数可用作该修饰的方法参数在方法体内的属性
路由匹配
路由同样支持模式匹配。使用“*”星号作为通配符,将匹配任何字符组合
@Get('ab*cd') // 将匹配abcd、ab_cd、abecd等
findAll() {
return 'This ';
}
参数装饰器
| 装饰器 | 普通表达对象 |
|---|---|
@Request() | req |
@Response() @Res()* | res |
@Next() | next |
@Session() | req.session |
@Param(key?: string) | req.params / req.params[key] |
@Body(key?: string) | req.body / req.body[key] |
@Query(key?: string) | req.query / req.query[key] |
@Headers(name?: string) | req.headers / req.headers[name] |
@Ip() | req.ip |
状态码
默认情况下,响应的状态码是200,也可以通过@HttpCode装饰器,修改状态码
响应头Headers
使用 @header() 修饰器或类库特有的响应对象去自定义响应头
重定向
将响应重定向到特性URL,使用 @Redirect()装饰器或特定于库的响应对象
Nest支持async功能
比较熟悉的Async/ await ,数据读取时大部分是异步的,每个异步函数都必须返回Promise。
@Get()
async findAll(): Promise<any[]> {
return []
}