一、简介
- 纯中文文档、中英混合文档、英文文档
Nest (NestJS)
是一个用于构建高效、可扩展的 Node.js 服务器端应用的框架。 它使用渐进式JavaScript
,构建并完全支持 TypeScript(但仍然允许开发者使用纯JavaScript
进行编码)并结合了OOP
(面向对象编程)、FP
(函数式编程)和FRP
(函数式反应式编程)的元素。- 在幕后,
Nest
使用强大的 HTTP 服务器框架,如 Express(默认),也可以选择配置为使用 Fastify! Nest
在这些常见的Node.js
框架(Express/Fastify
)之上提供了一个抽象级别,但也直接向开发者公开了它们的API
。 这使开发者可以自由使用可用于底层平台的无数第三方模块。
二、前置知识点案例
- 修饰器分为
ClassDecorator
、PropertyDecorator
、MethodDecorator
、ParameterDecorator
,测试装饰器,需要开启一项配置。 - 安装
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
- 测试代码
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
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) } }