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)
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡尔特斯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值