01. 创建nest项目
npm i -g @nestjs/cli
nest new nest-admin
cd new nest-admin
npm run start
如下图所示,成功:
02. 创建vue项目(vue-element-plus-admin)
环境准备:nodejs>18.0.0、pnpm、git
# 全局安装 pnpm
npm i -g pnpm
# 验证
pnpm -v
# clone 代码
git clone https://gitee.com/kailong110120130/vue-element-plus-admin.git
# 安装依赖
pnpm i
pnpm run dev
运行成功,如下图:
03.创建并关联git
- 删除
nestjs和vue-element-plus-admin项目自带的git - 创建码云gitee
- 本地git初始化:
git init
git init
git remote add origin https://gitee.com/xxxxxxx.git
git status
git add .
git commit -m 'first'
git push -u origin "master"
相关git命令可以参考:git经验合集
04. nest连接mysql
mysql安装可以参考:Mysql安装参考链接: https://blog.csdn.net/rbx508780/article/details - 掘金
nest连接mysql可以参考nest官方文档:nest.nodejs.cn/techniques/…
npm install --save @nestjs/typeorm typeorm mysql2
// app.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'root',
database: 'test',
entities: [],
synchronize: true,
}),
],
})
export class AppModule {}
05.nest g resource users 生成资源
很香,很方便,controller、service、entities等都自动生成好了
参考链接:增删改查生成器 | NestJS 中文网
06.nest中创建数据库实体entity
改写users.entity.ts
// user.entity.ts
import { Entity, Column, PrimaryGeneratedColumn, Unique } from 'typeorm';
@Entity('users')
export class User {
@PrimaryGeneratedColumn()
id: number;//主键,自增
@Column()
// @Unique(['username'])
username: string;
@Column()
password: string;
@Column()
role: string;
@Column()
nickname: string;
@Column()
active: number;//是否启用
@Column()
avatar: string;//头像
}
在dbeaver中创建对应的数据库表及字段
07.改写service和controller
// users.service.ts
import { Injectable } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './entities/user.entity'
@Injectable()
export class UsersService {
constructor(
@InjectRepository(User)
private readonly usersRepository: Repository<User>
) { }
create(createUserDto: CreateUserDto) {
return 'This action adds a new user';
}
findAll() {
return `This action returns all users`;
}
findOne(id: number) {
return this.usersRepository.findOneBy({ id });
}
update(id: number, updateUserDto: UpdateUserDto) {
return `This action updates a #${id} user`;
}
remove(id: number) {
return `This action removes a #${id} user`;
}
}
// users.contriller.ts
import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common';
import { UsersService } from './users.service';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Post()
create(@Body() createUserDto: CreateUserDto) {
return this.usersService.create(createUserDto);
}
@Get()
findAll() {
return this.usersService.findAll();
}
@Get(':id')
findOne(@Param('id') id: string) {
return this.usersService.findOne(+id);
}
@Patch(':id')
update(@Param('id') id: string, @Body() updateUserDto: UpdateUserDto) {
return this.usersService.update(+id, updateUserDto);
}
@Delete(':id')
remove(@Param('id') id: string) {
return this.usersService.remove(+id);
}
}
// app.modules.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UsersModule } from './users/users.module';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'root',
database: 'vue-nest-admin',
autoLoadEntities: true,// 自动加载实体
synchronize: true,//不能用于生产环境
}),
UsersModule,
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule { }
通过apifox或者postman测试,成功效果如下图:
08.完整的增、删、查
import { Injectable } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository, DeleteResult } from 'typeorm';
import { User } from './entities/user.entity'
@Injectable()
export class UsersService {
constructor(
@InjectRepository(User)
private readonly usersRepository: Repository<User>
) { }
create(createUserDto: CreateUserDto): Promise<User> {
const user = new User();
user.username = createUserDto.username;
user.password = createUserDto.password;
user.role = createUserDto.role;
user.nickname = createUserDto.nickname;
user.avatar = createUserDto.avatar;
user.active = 1;
return this.usersRepository.save(user);;
}
findAll(): Promise<User[]> {
return this.usersRepository.find();
}
findOne(id: number): Promise<User> {
return this.usersRepository.findOneBy({ id });
}
update(id: number, updateUserDto: UpdateUserDto) {
return `This action updates a #${id} user`;
}
remove(id: number): Promise<DeleteResult> {
return this.usersRepository.delete(id);
}
}