这是我参与「第四届青训营 」笔记创作活动的第5天
在项目中使用到了nest js 后端,记录下笔记
Nestjs 是一个用于构建高效可扩展的一个基于Node js 服务端 应用程序开发框架
并且完全支持typeScript 结合了 AOP 面向切面的编程方式
nestjs 还是一个spring MVC 的风格 其中有依赖注入 IOC 控制反转 都是借鉴了Angualr
nestjs 的底层代码运用了 express 和 Fastify 在他们的基础上提供了一定程度的抽象,同时也将其 API 直接暴露给开发人员。这样可以轻松使用每个平台的无数第三方模块
初步认识看来,和Java的spring boot 框架非常相似,
都是使用注解开发,在nestjs 中叫 装饰器,其实装饰器是ts 的产物,nestjs 只是很好的利用了这一点
通过cli创建nestjs项目
npm i -g @nestjs/cli
nest new [项目名称]
"start": "nest start",
"start:dev": "nest start --watch",
"start:debug": "nest start --debug --watch",
"start:prod": "node dist/main",
其中 start:dev 为热部署模式
在main.ts 为入口文件
import { NestFactory } from "@nestjs/core";
import * as bodyParser from "body-parser";
import { AppModule } from "./app.module";
async function bootstrap() {
const app = await NestFactory.create(AppModule);
// 跨域设置
app.enableCors();
// post 提交数据大小设置
app.use(bodyParser.json({ limit: "100mb" }));
app.use(bodyParser.urlencoded({ limit: "100mb", extended: true }));
await app.listen(3000);
}
bootstrap();
其结构分为2个部分, Module ,Controller,Service
Module
Module 为声明模块使用到的依赖,以及需要依赖注入的文件
例如
import { Module } from "@nestjs/common";
import { BasicbehaviorController } from "./basicbehavior.controller";
import { BasicbehaviorService } from "./basicbehavior.service";
@Module({
// 声明 controller 类
controllers: [BasicbehaviorController],
// 声明 service 类
providers: [BasicbehaviorService],
})
export class BasicbehaviorModule {}
controller
// 注解的值为该路径的下的开头路径,
@Controller("/behaviors")
export class BasicbehaviorController {
// 声明service 类,nestjs 会自动帮我们创建这个类的对象
constructor(private basicbehaviorService: BasicbehaviorService) {}
/**
* 基础行为数据插入
*/
// 声明返回的http 状态码
@HttpCode(201)
// 请求方式为post 请求路径为 /behaviors/basicbehaviors
@Post("/basicbehaviors")
totalBasicBehaviorLoad(@Body() basicIndicator: BasicBehavior[]) {
return this.basicbehaviorService.upLoadBasicBehavior(basicIndicator);
}
}
@Body() 注解,和spring boot 的 @RequestBody 类似,用于接收json 格式的请求体
service
// 表示这是一个被nestjs 所管理的类,和spring @service注解类似
@Injectable()
export class BasicbehaviorService {
}
nestj cli
生成模块内容,不需要手动填写,执行nestjs 的命令即可
生成module.ts
nest g mo user
生成 controller.ts
nest g co user
生成service.ts
nest g s user
建议严格按照这种顺序进行执行,这样,nestjs 会自动把我们的模块添加到顶级模块下 既 app.module.ts
// 例如项目中的app.module.ts
@Module({
imports: [
EsConfigModule,
BasicindicatorModule,
InterfaceindicatorModule,
ResourceindicatorModule,
ResourceerrorModule,
JavascripterrorModule,
PromiseerrorModule,
VueerrorModule,
BasicbehaviorModule,
ClickbehaviorModule,
PageskipbehaviorModule,
RoutingskipbehaviorModule,
InterfaceerrorsModule,
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}