Nest.js 两个我非常喜欢的特性

前面讲了nest.js 的一些简单安装使用说明,这篇文章讲点我最喜欢的两个nest.js的特性,一个是丰富的命令行工具,一个是和swagger很好而且很方便的集成。

目录

命令行

Swagger

Demo


命令行

先看命令行工具:

nest -h
Usage: nest  [options]

Options:
  -V, --version                                   output the version number
  -h, --help                                      output usage information

Commands:
  new|n [options] [name]                          Generate Nest application
  build [options] [app]                           Build Nest application
  start [options] [app]                           Build Nest application
  generate|g [options]  [name] [path]  Generate a Nest element
    Available schematics:
      ┌───────────────┬─────────────┐
      │ name          │ alias       │
      │ application   │ application │
      │ angular-app   │ ng-app      │
      │ class         │ cl          │
      │ configuration │ config      │
      │ controller    │ co          │
      │ decorator     │ d           │
      │ filter        │ f           │
      │ gateway       │ ga          │
      │ guard         │ gu          │
      │ interceptor   │ in          │
      │ interface     │ interface   │
      │ middleware    │ mi          │
      │ module        │ mo          │
      │ pipe          │ pi          │
      │ provider      │ pr          │
      │ resolver      │ r           │
      │ service       │ s           │
      │ library       │ lib         │
      │ sub-app       │ app         │
      └───────────────┴─────────────┘
  info|i                                          Display Nest CLI details
  update|u [options]                              Update Nest dependencies
  add  [args...]                         Add a library

可以看到,nest的命令行参数是非常详细的,一般来说,我们可以直接使用:

 nest g mo name

创建一个名为name的模块,也可以使用co创建控制器之类的,这样他会为我们自动创建名为name的文件夹,生成module文件,同时在main.ts中自动引用,总体来说是相当省心的。

命令行参数还有很多有意思的东西,比如start和build,这里先不详细介绍,以后会用的到的。

Swagger

然后是swagger,没接触过swagger的同学可能对这个东西不太理解,总的来说swagger是一款让你更好的书写API文档的框架,同时也可以通过swagger editor生成响应api的代码,是一个可以称为框架的很好的工具。在生成文档方面,一般我们会使用一些配置文件之类的,其实是比较麻烦的,而nest天生集成了 swagger并且使用的是优雅的装饰器的写法,可以说是非常另人喜欢的一个功能了。

首先要在nest里面使用swagger,我们首先要安装:

$ npm install --save @nestjs/swagger swagger-ui-express

接着在main.js中引入:

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  const options = new DocumentBuilder()
    .setTitle('博客接口')
    .setDescription('我的博客接口文档')
    .setVersion('1.0')
    .build();
  const document = SwaggerModule.createDocument(app, options);
  SwaggerModule.setup('api-docs', app, document);

  await app.listen(3000);
}
bootstrap();

与默认相比,增加的主要是options这一块的内容,这里面的参数可以让你随便定义,最后"SwaggerModule.setup('api-docs', app, document);"是让你去定义路由的,也可以根据你的喜欢去改地址。

Demo

这里我们以user里面的一个post请求为例,看一下如何生成swagger文档。

首先创建一个users的模块和控制器:

nest g mo users
nest g co users

然后我们添加几个路由:

import { Controller, Get, Post, Body } from '@nestjs/common';
import { ApiOperation, ApiUseTags } from '@nestjs/swagger';
// import { CreateUserDto } from './dto'

@Controller('users')
@ApiUseTags('用户网站')
export class UsersController {
  @Get()
  @ApiOperation({title: '显示root目录'})
  index() {
    return [
      {
        msg: 'this is user'
      }
    ]
  }

  @Get(':id')
  @ApiOperation({title: '根据id显示用户'})
  getUserById() {
    return [
    {
      msg: 'this is an id',
      status: 'good'
    }
    ]
  }

/*
  @Post()
  @ApiOperation({title: '创建用户'})
  createPost(@Body() body: CreateUserDto) {
    return body
  }
}
*/

这里我注释掉的是关于使用数据传输对象结合post请求传参的问题,如果懂的人可以去掉注释直接拿这个demo去测试了。

我们简单的分析一下这段代码:

@ApiUseTags('用户网站')
@ApiOperation({title: '根据id显示用户'})

这里是相当于为swagger增加一个描述,一个是描述类,一个是描述行为:

Nest.js 两个我非常喜欢的特性_第1张图片

因为我还定义了其他接口,大家只需要看用户网站下面的内容即可。

最后就是刚刚注释的内容,这里使用了数据传输对象的方式,首先在同目录下创建一个dto.ts的文件用来放置数据传输对象,类似于Flask的flask-parse的功能,然后同样用装饰器引用,即最下面post的相关内容。

最后的效果如图:

Nest.js 两个我非常喜欢的特性_第2张图片

Nest.js 两个我非常喜欢的特性_第3张图片

Nest.js 两个我非常喜欢的特性_第4张图片

最后要说的是,因为人不在祖国,所以一些高清的照片无法很好的上传,否则CSDN就会卡死,,,

等回国之后我会尽量补上,以上。

你可能感兴趣的:(Node.js,学习日记)