首先 前端学习 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],
})
链接完数据库之后 就开始写相关查询的代码。
我这里有一个 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.tsimport { 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才能操作)。 等等...
今天就到这里!
文档不对,请指出问题。(叠一下甲)