我在前端写Java SpringBoot项目( 二 )


•service- 服务类,用于处理与数据库交互逻辑
•dto- DTO(Data Transfer Object)可以用于验证输入数据、限制传输的字段或格式 。
•entities- 实体类,用于描述对象相关的属性信息
•module- 模块 , 用于注册所有的服务类、控制器类,类似 Spring 里面的 bean
?这里不能完全等同哈,两个实现机制上就不同 , 只是帮助大家理解 。
•mAIn.ts- nest 启动入口
•types- type 相关声明类型

我在前端写Java SpringBoot项目

文章插图
只是写 demo, 搞快点就没有怎么写注释了 , 我感觉是一看就懂了,跟 Java SpringBoot 的写法非常一致,部分代码展示:
  • 控制器 controller
// packages/node-server-demo/src/controller/user/index.tsimport{Controller,Get,Query }from'@nestjs/common';
importUserServices from'@/service/user';
import{GetUserDto,GetUserInfoDto }from'@/dto/user';
@Controller('user')
exportclassUserController{
constructor(privatereadonlyuserService:UserServices){}
// Get 请求 user/name?name=bricechou
@Get('name')
asyncfindByName(@QuerygetUserDto:GetUserDto){
returnthis.userService.read.findByName(getUserDto.name);
}
// Get 请求 user/info?id=123
@Get('info')
asyncfindById(@QuerygetUserInfoDto:GetUserInfoDto){
constuser =awaitthis.userService.read.findById(getUserInfoDto.id);
return{gender:user.gender,job:user.job };
}
}
// packages/node-server-demo/src/controller/log/add.ts
import{Controller,Post,Body }from'@nestjs/common';
import{AddLogDto }from'@/dto/log';
importLogServices from'@/service/log';
@Controller('log')
exportclassCreateLogController{
constructor(privatereadonlylogServices:LogServices){}
// post('/log/add')
@Post('add')
create(@BodycreateLogDto:AddLogDto){
returnthis.logServices.create.create(createLogDto);
}
}
  • 数据转换 Data Transfer Object
// packages/node-server-demo/src/dto/user.tsexportclassCreateUserDto{
name:string;
age:number;
gender:string;
job:string;
}
// 可以分开写 , 也可以合并
exportclassGetUserDto{
id?:number;
name:string;
}
// 可以分开写,也可以合并
exportclassGetUserInfoDto{
id:number;
}
  • service 数据库交互处理类
// packages/node-server-demo/src/service/user/read.tsimport{Injectable }from'@nestjs/common';
import{User }from'@/entities/User';
@Injectable
exportclassReadUserService{
constructor{}
asyncfindByName(name:string):Promise<User>{
// 可以处理判空,从数据库读取/写入数据,可能会被多个 controller 进行调用
console.info('ReadUserService findByName > ',name);
returnPromise.resolve({id:1,name,job:'程序员',gender:1,age:18});
}
asyncfindById(id:number):Promise<User>{
console.info('ReadUserService findById > ',id);
returnPromise.resolve({
id:1,
name:'BriceChou',
job:'程序员',
gender:1,
age:18,
});
}
}
  • module 模块注册,服务类 / 控制类
//packages/node-server-demo/src/module/user.tsimport{Module }from'@nestjs/common';
importUserService,{ReadUserService }from'@/service/user';
import{UserController }from'@/controller/user';
@Module({
providers:[UserService,ReadUserService],
controllers:[UserController],
})
exportclassUserModule{}
//packages/node-server-demo/src/module/index.ts 根模块注入
import{Module }from'@nestjs/common';
import{UserModule }from'./user';
import{LogModule }from'./log';
@Module({
imports:[
UserModule,
LogModule,
],
})
exportclassAppModule{}
  • main.js 启动注册的所有类
// packages/node-server-demo/src/main.tsimport{ AppModule } from'@/module';
import{ NestFactory } from'@nestjs/core';
import{ NestExpressApplication } from'@nestjs/platform-express';
asyncfunctionbootstrap{
constapp = awaitNestFactory.create<NestExpressApplication>(AppModule);
// 监听端口 3000
awaitapp.listen(3000);
}
bootstrap;
这样一个单机的服务器就启动起来了,我们可以使用 Postwoman[https://hoppscotch.io/] 进行请求,瞅瞅看返回效果 。


推荐阅读