『埃尔法哥哥』nestjs使用Typeorm实现数据库CRUD操作

本示例在nestjs脚手架项目基础上 , 进行了一些修改 , 并通过TypeOrm实现了数据库的增删读写操作 。 由于Typeorm更适合关系型数据库 , 本示例为简便起见 , 选择sqlite3作为试验数据库 。 对于非关系型数据库如mongodb , 则推荐使用mongoose或者typegoose等库进行数据库操作 。
1.nestjs安装和快速启动
『埃尔法哥哥』nestjs使用Typeorm实现数据库CRUD操作
文章图片
安装nestjs命令行工具
#安装cli工具
$npmi-g@nestjs/cli
#新建项目
$nestnewprojectName
#如果用yarn安装的话
$yarnglobaladd@nestjs/cli
2.模版项目helloworld说明
不同版本的cli命令行生成的默认项目可能有所不同 。 这里将默认的helloworld修改为async异步形式来对nestjs方法进行说明 。
2.1app.controller.ts文件
import{Controller,Get,Inject}from'@nestjs/common';
import{AppService}from'./app.service';
/**
*应用程序控制器 , @Controller()可以指定参数 , 用于定义类的父路由 , 如@Controller("cat") , 此时这个类的所有父路由就会成为/cat
*
*被@Controller()修饰的类 , 可以通过其构造函数完成依赖注入 , 但依赖注入的类必须与当前类属于同一个模块
*/
@Controller()
exportclassAppController{
/**
*构造函数 , 用于注入这个类的依赖 , 注入类时 , 需要使用@Inject()修饰符 , 其参数是被注入的类的类名
*在注入被@Injectable()修饰的类时 , 可以不使用@Inject()修饰参数 , 此时依赖注器入会使用参数的类型完成注入
*
*Tips:这里使用@Inject(AppService)是为了规范代码风格
*/
constructor(
@Inject(AppService)privatereadonlyappService:AppService,
){}
/**
*@Get()可以指定参数 , 用于定义方法路由 , 如@Get(":id") , 此时这个方法路由就会成为/:id , 即查询指定ID
*/
@Get()
asyncroot(){
returnthis.appService.root();
}
}
2.2app.service.ts文件
『埃尔法哥哥』nestjs使用Typeorm实现数据库CRUD操作
文章图片
import{Injectable}from'@nestjs/common';
/**
*被@Injectable()修饰的类 , 可以通过其构造函数完成依赖注入 , 但依赖注入的类必须与当前类属于同一个模块
*/
@Injectable()
exportclassAppService{
constructor(){}//构造函数 , 一般用于处理依赖注入
asyncroot(){
return'HelloWorld!';
}
}
2.3app.module.ts文件
import{Module}from'@nestjs/common';
import{APP_INTERCEPTOR}from'@nestjs/core';
import{TypeOrmModule}from'@nestjs/typeorm';
import{CatModule}from'cats/cat.module';
import{ErrorsInterceptor}from'common/errors.interceptor';
import{AppController}from'./app.controller';
import{AppService}from'./app.service';
/**
*@Module()定义一个模块 , 并管理这个模块的导入集合、控制器集合、提供者集合、导出集合
*/
@Module({
//TypeOrmModule.forRoot()默认加载项目根目录下的ormconfig.json配置文件用于配置数据库连接
//TypeORM配置文件详细文档https://typeorm.io/#/using-ormconfig
imports:[TypeOrmModule.forRoot(),CatModule],//导入其他模块的集合
controllers:[AppController],//当前模块的控制器集合
providers:[
{
provide:APP_INTERCEPTOR,
useClass:ErrorsInterceptor
},
AppService
],//当前模块的提供者集合
exports:[],//导出当前模块的提供者 , 用于被其他模块调用