Nest 初体验

初始化项目

1
2
$ npm i -g @nestjs/cli
$ nest new project-name

文件概览

src/main.ts 入口文件

1
2
3
4
5
6
7
8
9
import {NestFactory} from '@nestjs/core';
import {AppModule} from './app.module';

async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}

bootstrap();

入口文件,通过 NestFactory 创建一个 Nest 应用实例,并且监听 3000 端口。

控制器

创建控制器命令:nest g controller [name]

接收请求的地方,通过类和装饰器对元数据进行关联。

控制器代码示例

在 constructor 中注入 service,@Get 表明这是一个 Get 请求,可以在 Get 中添加路径。其他请求方式包括 @Post、@Delete、@Put 等。

可能用到的装饰件器

@Controller

定义控制器,另外可以传入路由路径前缀。

@Param(param?: string)

1
2
3
4
@Get('/name/:id')
getNameById(@Param() params): string {
// ...
}

@Params 可以获取到路径中的参数对象,可传入属性名表示获取该属性的值。

@Body(param?: string)

@Body 获取的请求体中的参数对象,可传入属性名表示获取该属性的值

@Query(param?: string)

@Query 获取的时 url 上的 query 对象,例如 xxx?name='xxx',另外可传入属性名表示获取该属性的值

提供器

服务层,在该层处理业务逻辑
提供器代码示例

可能用到的装饰器

@Injectable()

将该类标记为提供器

InjectRepository()

将实体类的 repository 注入到 userRepository 属性中,在 service 层中调用 userRepository 进行数据库操作。

模块

创建命令:nest g module name

每个应用至少会有一个模块,即根模块,模块将控制器、提供器、相关组件

1
2
3
4
5
6
7
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {
}
  1. providers:将由 Nest 注入器实例化并且至少可以在该模块中共享的提供程序
  2. controllers:此模块中定义的必须实例化的控制器集
  3. imports:导出此模块所需的提供程序的导入模块列表
  4. exports:这个模块提供的 providers 的子集应该在导入这个模块的其他模块中可用。你可以使用提供器本身或仅使用其令牌(provide 值)

模块是构建应用图的起点,

异常过滤器

抛出异常

1
throw new HttpException('Forbidden', HttpStatus.FORBIDDEN);

Nest 内置了 HttpException 类用来抛出异常,第一个参数是返回的 message,第二个参数是状态码,HttpStatus
是一个保存了 {错误类型: 错误码} 的对象,例如你可以通过

1
throw new HttpException('参数类型不正确', HttpStatus.BAD_REQUEST);

返回

1
2
3
4
{
"statusCode": 400,
"message": "参数类型不正确"
}

异常过滤器

异常过滤器
这是官网提供的异常过滤器

绑定过滤器

绑定过滤器

通过 @UseFilters(new HttpExceptionFilter()) 来给控制层的接口添加异常过滤器

连接数据库

第一步:安装依赖

1
npm install --save @nestjs/typeorm typeorm mysql2

第二步:连接数据库

在根目录的 app.module.ts 中,配置自己的数据库。

连接配置


Nest 初体验
https://l1ushun.github.io/2024/04/02/nest-01/
作者
liu shun
发布于
2024年4月2日