Nestjs(一)入门前置知识点

一、简介

  • 纯中文文档中英混合文档英文文档

  • Nest (NestJS) 是一个用于构建高效、可扩展的 Node.js 服务器端应用的框架。 它使用渐进式 JavaScript,构建并完全支持 TypeScript(但仍然允许开发者使用纯 JavaScript 进行编码)并结合了 OOP(面向对象编程)、FP(函数式编程)和 FRP(函数式反应式编程)的元素。

  • 在幕后,Nest 使用强大的 HTTP 服务器框架,如 Express(默认),也可以选择配置为使用 Fastify

  • Nest 在这些常见的 Node.js 框架(Express/Fastify)之上提供了一个抽象级别,但也直接向开发者公开了它们的 API。 这使开发者可以自由使用可用于底层平台的无数第三方模块。

二、前置知识点案例

  • 1、前置知识 - IOC 控制反转 DI 依赖注入

  • 2、前置知识 - 装饰器

    • 修饰器分为 ClassDecoratorPropertyDecoratorMethodDecoratorParameterDecorator,测试装饰器,需要开启一项配置

    • 安装 tsc,可以将 ts 文件按照编译配置编译成目标 js 运行到浏览器,这里只是为了用它生成配置文件。

      # npm 安装
      $ npm i -g typescript
      # yarn 安装
      $ yarn global add typescript
      
      # 安装校验
      $ tsc -v
      
    • 安装 ts-node,作用是 nodejs 即可直接运行TS代码,内部将 TS => JS,然后nodejs 再运行 JS 代码。

      # npm 安装
      $ npm i -g ts-node
      
      # 安装校验
      $ ts-node -v
      
    • 在测试项目根目录中,执行下面命令得到 tsconfig.json 文件,并打开 experimentalDecorators 这行的注释,才算启动了装饰器。

      $ tsc --init
      

      image.png

    • 测试代码 index.ts,使用了 ClassDecorator

      // 装饰器
      const decotator: ClassDecorator = (target: any) => {
              
              
        // 好处就是不去破坏原有的类接口,从而新增一些属性
        target.prototype.name = 'dzm'
        // 怕属性重名可以添加下划线
        target.prototype.__name = '__dzm'
      }
      
      // 装饰器使用 - 方式一: 注意,这种方式必须要在 tsconfig.json 启用装饰器,否则只能使用方式二
      @decotator
      class Dzm {
              
              
        constructor() {
              
              
        }
      }
      
      // 装饰器使用 - 方式二:
      // decotator(Dzm)
      
      
      // 使用装饰器调整过的 class
      const dzm: any = new Dzm()
      console.log(dzm.name, dzm.__name) // dzm __dzm
      
    • 运行 index.ts

      $ ts-node index.ts
      
      dzm __dzm
      
  • 3、前置知识 - 装饰器实现一个 GET 请求

    import axios from 'axios'
    
    // 装饰器可以传入自定义参数
    const Get = (url: string): MethodDecorator => {
          
          
        // 通过装饰器处理
        return (target, key, descriptor: PropertyDescriptor) => {
          
          
            // 获取到 getList 函数方法
            const fnc = descriptor.value;
            // 请求
            axios.get(url).then(res => {
          
          
                // 返回
                fnc(res, {
          
          
                    status: 200,
                })
            }).catch(e => {
          
          
                // 返回
                fnc(e, {
          
          
                    status: 500,
                })
            })
        }
    }
    
    // 定义控制器
    class Controller {
          
          
        constructor () {
          
          
            // 构造器
        }
        @Get('https://api.apiopen.top/api/getHaoKanVideo?page=0&size=10')
        getList (res: any, status: any) {
          
          
          console.log(res.data.result.list, status)
        }
    }
    

猜你喜欢

转载自blog.csdn.net/zz00008888/article/details/134859304