背景最近在学习NestJs,但不是从实际需求出发,也没有项目支持。并巩固所学的知识,所以我想以搭建博客后台系统的需要为出发点,巩固所学的知识,同时也作为学习新知识、解决问题和注意事项的记录。1.安装依赖yarnadd@nestjs/typeormtypeormmysql2.连接数据库(MySQL)在app.modules中使用TypeOrmModule实现数据库连接//src/app.module.tsimport{Module}from'@nestjs/common';从'./app.controller'导入{AppController};从'./app.service'导入{AppService};从'@nestjs/typeorm'导入{TypeOrmModule};@Module({导入:[TypeOrmModule.forRootAsync({useFactory:()=>({type:'mysql',host:'localhost',port:3306,username:'root',password:'',database:'blogs',timezone:'UTC',charset:'utf8mb4',实体:['./**/*.entity.js'],同步:true,日志记录:true,})}),控制器:[AppController],提供者:[AppService],})exportclassAppModule{}3.创建entity实体(实体对象)映射数据库表,entity中的Column对应表中的字段//src/entities/article.entity.tsimport{Entity,Column,PrimaryGeneratedColumn,CreateDateColumn,UpdateDateColumn,DeleteDateColumn}来自'typeorm';@实体y('article')exportclassArticleEntity{@PrimaryGeneratedColumn({type:'int',comment:'primarykeyid',})id:number;@Column('varchar',{nullable:false,comment:'文章标题',})title:string;@Column('varchar',{nullable:false,comment:'文章内容',})内容:字符串;@Column({nullable:false,name:'category_id',comment:'文章分类',})categoryID:string;@Column('varchar',{nullable:true,comment:'文章介绍',})intro:string;@Column('varchar',{nullable:true,comment:'文章封面',})cover:string;@Column('varchar',{nullable:true,comment:'文章标签',})标签:字符串;@Column('enum',{nullable:false,default:0,enum:[0,1,2],comment:'文章状态,0正在编辑,1已发表,2不可用',})status:number;@CreateDateColumn({type:'timestamp',name:'created_at',comment:'creationtime',})createdAt:Date;@UpdateDateColumn({type:'timestamp',name:'updated_at',comment:'上次更新时间',})更新时间:日期;@DeleteDateColumn({type:'timestamp',name:'delete_at',comment:'delete',})deleteAt:Date;}//src/entities/article-category.entity.tsimport{实体,列,PrimaryGeneratedColumn,CreateDateColumn,UpdateDateColumn,DeleteDateColumn}来自'typeorm';@Entity('article_category')exportclassArticleCategoryEntity{@PrimaryGeneratedColumn({type:'int',comment:'primarykeyid',})id:number;@Column('varchar',{nullable:false,unique:true,name:'category_name',comment:'文章类别名称',})categoryName:string;@CreateDateColumn({type:'timestamp',name:'created_at',comment:'Creationtime',})createdAt:Date;@UpdateDateColumn({type:'timestamp',name:'updated_at',comment:'Lastupdatetime',})updatedAt:Date;@DeleteDateColumn({type:'timestamp',name:'delete_at',comment:'delete',})deleteAt:Date;}Tips:Entity必须放在/src/entities目录下才能生成.entity.jsdist目录下的格式化文件,直接加载.entity.ts文件将报告语法错误。之前尝试过创建libs,然后将数据库模块放到libs下,希望能把数据库部分分开,方便维护;但是发现最后编译只会在dist中生成一个main.js文件,缺少.entity.js,查看main.js的内容发现*.entity.ts的编译结果也是直接放到了main.js中4、数据库的CURDEntityManager:就像一个放置实体仓库集合的地方,可以管理(插入、更新、删除、加载等)任何实体;可以通过getManager()或Connection访问实体管理器。Repository:与EntityManager类似,但其操作仅限于具体实体;可以通过getRepository(Entity),Connection#getRepository访问存储库。下面使用Repository提供的API实现数据库的增删改查,以及左链接查询//src/service/article/article.service.tsimport{Injectable}from'@nestjs/common';从'@nestjs/typeorm'导入{InjectRepository};从'src/entities/article-category.entity'导入{ArticleCategoryEntity};从'src/entities/article.entity'导入{ArticleEntity};导入{Repository,createQueryBuilder,getConnection,getRepository}from'typeorm';@Injectable()exportclassArticleService{constructor(@InjectRepository(ArticleCategoryEntity)privatereadonlyarticleCategoryRepo:Repository
