安装与新建项目
npm i -g @nestjs/cli
nest new your-project-name
核心文件概述
app.controller.ts具有单个路由的基本控制器app.controller.spec.ts控制器的单元测试。app.module.ts应用程序的根模块。app.service.ts具有单一方法的基本服务。main.ts应用程序的入口文件,它使用核心函数NestFactory创建一个 Nest 应用程序实例。
main.ts 程序的入口文件 使用 nest工厂创建一个应用实例
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
Controllers
处理并响应来自客户端的请求
创建Controller
用@Controller装饰器将类和相关的原数据关联,并创建路由映射 使用cli快速创建Controller
nest g controller [name]
import { Controller, Get } from '@nestjs/common';
@Controller('cat') // cat 路由前缀
export class CatController {
@Get()
findAll(): string {
return '获取全部'
}
@Get('one')
findOne(): string {
return '获取一个'
}
}
// 值得注意的是这里的 findAll, findOne 方法名是完全任意的
请求对象
- 处理程序通常需要访问客户端请求的详细信息。(获取请求参数);
- NestJS通过在处理方法中使用装饰器,指示Nest获取请求对象
请求对象装饰器:
获取路由参数:
// get
@Get(':id')
findOne(@Param() params):string {
console.log(params.id)
return `hello ${params.id}!`
}
// 说明:@Params() 用于装饰params, 可以将请求参数作为params的属性。
自定义Http状态码 @HttpCode()
@Post()
@HttpCode(204)
create() {
return 'This action adds a new cat';
}
自定义响应头 @Header()
@Post()
@Header('Cache-Control', 'none')
create() {
return 'This action adds a new cat';
}
重定向 @Redirect()
@Get()
@Redirect('https://nestjs.com', 301)
// 参数一:重定向url 参数二: 状态码
动态重定向:处理程序中返回 {url: string, statusCode: number} 即可覆盖掉@Redirect()的任何参数
子域路由
@Controller({ host: ':account.example.com' })
export class AccountController {
@Get()
getInfo(@HostParam('account') account: string) {
return account;
}
}
异步
每一个async 处理函数必须返回一个 Promise, NestJS能够自行解析延迟值 Request PlayLoad 我们通过使用 class 的方式创建DTO (数据传输对象),确保 Post 请求参数类型一致。
ValidationPipe可以过滤掉不应被方法处理程序接收的属性。在这种情况下,我们可以将可接受的属性列入白名单,并且任何未包含在白名单中的属性都会自动从结果对象中剥离
// cat.dto.ts
export class CreateCatDto {
name: string;
age: number;
breed: string;
}
// cat.controller.ts
@Post()
async createCat(@Body() createCatDto: createCatDto) {
retrun 'hello!'
}
// 白名单是 'name', 'age','breed'
未完待续。。。