Nestjs 初步学习

224 阅读3分钟

首先 前端学习 NestJs 我还是建议先看看一下 springboot 框架的视频,虽然大概率会看不懂,但是里面的文档目录以及模块负责的作用,还是会知道打开, 这样你学习 NestJs 也会触类旁通。 不然你直接进NestJs官网去学习 你会对 Controllers,Providers,Modules 这些定义会一头雾水。(当然跟这篇文章 没一点关系)

根据 NestJs 官网要求 node>= 16 才能安装

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

安装创建新的项目之后 cd 进去 直接 run 起来

 npm run start:dev 

然后就可以打开 你本地 http://localhost:3000 看到你的项目了

项目启动起来之后 其他的先不用管,直接快进到 链接数据库 进行 curd 操作。 我想这些操作会使前端人员比较感兴趣。

终端 输入以下命令 安装 mysql 的插件

npm install --save @nestjs/typeorm typeorm mysql2 

打开你的 app.modules.ts 文件

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: '', // 数据库ip地址 
      port: 3306, // 端口号 一般默认3306
      username: '', //用户名
      password: '', //密码
      database: '', //数据库名字
      synchronize: true,
      entities: [] //数据库的表 (可以先不填写)
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
}) 
 

链接完数据库之后 就开始写相关查询的代码。

image.png 我这里有一个 springboot 数据库, goods表, 接下来创建 goods 相关代码,首先创建goods相关的文。件,终端分别执行下列三行命令。

nest g module goods;  
nest g controller goods; 
nest g service goods; 

顺序别弄错,否则会出现一个小问题(app.module.ts 会重复引入 GoodsController,GoodsService)

这时候 你的文件目录 会有一个goods文件夹 , app.module.ts 也会有变化。 先不管,在src 下面创建entities文件夹, 里面创建goods.entity.ts

import { Column, Entity, BaseEntity, PrimaryGeneratedColumn } from "typeorm";

@Entity('goods') //数据库的表名(可以不写)
export class Goods extends BaseEntity {
   @PrimaryGeneratedColumn() //数据库主键
   id: number

   @Column({ type: 'varchar', name: 'name' }) //type name 可写可不写 
   name: string //type 不要写错  有帖子说 如果写错 NestJs 会把这一列清空 ,重新创建相符的列

   @Column()
   storage: number

   @Column()
   goodsType: number

   @Column()
   count: number

   @Column()
   remark: string
}

打开 goods 文件下的goods.module.ts

import { Module } from '@nestjs/common';
import { GoodsService } from './goods.service';
import { GoodsController } from './goods.controller';
import { Goods } from '../entities/goods.entity';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [TypeOrmModule.forFeature([Goods])], //主要是这行 注入进来
  providers: [GoodsService],
  controllers: [GoodsController]
})
export class GoodsModule { }

app.module.ts 也要重新改一下

import { Goods } from './entities/goods.entity';  // 引入class Goods
@Module({
  imports: [
    TypeOrmModule.forRoot({
      ... 
      entities: [Goods] //把 goods 引入
    }),
    UserModule,
    StorageModule,
    GoodsModule,
    LoginModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})

以上结束

可以开始写 curd的代码了

首先是 goods.service.ts
import { HttpCode, Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Goods } from 'src/entities/goods.entity';
import { Repository } from 'typeorm';

@Injectable()
export class GoodsService {

   //这里InjectRepository 把 repository 对象注入到需要它的类中。它可以帮助我们在 nest 项目中使用 TypeORM 进行数据访问时更方便地处理数据库的依赖关系。
   constructor(  
      @InjectRepository(Goods)
      private readonly goods: Repository<Goods>
   ) { }
 
    //添加
   async addGood(data): Promise<Goods[]> {
      let good = await this.goods.create(data)
      return this.goods.save(good)

   }
    //查询
   async findAll(): Promise<Goods[]> {
      let goodList = await this.goods.query('select * from goods'); //可以写mysql 也可以 this.goods.find(); 
      return goodList
   }
   //编辑
   async update(data: Goods) {
      let goods = await this.goods.update(data.id, data);
      return goods
   }
   //删除
   async remove(id: number) {
      return await this.goods.delete(id)
   }

}

接下来 就该写 goods.controller.ts

import { Controller, Post, Body, Get, Param } from '@nestjs/common';
import { GoodsService } from './goods.service';
import { Goods } from 'src/entities/goods.entity';

@Controller('goods') //这里goods
export class GoodsController {

   constructor(private readonly goodService: GoodsService) { }

   @Get('list') //  goods/list
   async findAll(): Promise<Goods[]> {
      return this.goodService.findAll();
   }


   @Post('add') //  goods/add
   async create(@Body() createUserDto) {
      return this.goodService.addGood(createUserDto);
   }


   @Post('modify') //  goods/modify
   async update(@Body() createUserDto) {
      return this.goodService.update(createUserDto);
   }

   
   @Get('delete')  //  goods/delete
   async delete(@Param() id: number) {
      return this.goodService.remove(id);
   }
}

以上 就完成了 NestJs curd。

除此之外 其实还有很多东西要整改 ,封装返回的数据,拦截请求的操作(必须有token才能操作)。 等等...

今天就到这里!

文档不对,请指出问题。(叠一下甲)