nestjs学习| 青训营笔记

123 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第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 {}