Skip to content
On this page

起步

Nest 是一个高效构建 Node.js 应用程序的框架。

安装

推荐使用 Nest CL 建立新项目。

$ npm i -g @nestjs/cli
$ nest new project-name

当依赖下载完成后,可以看到基本的结构目录,存在核心文件:ControllerModuleService

image.png

app.controller.ts带有单个路由的基本控制器示例。
app.controller.spec.ts对于基本控制器的单元测试样例
app.module.ts应用程序的根模块。
app.service.ts带有单个方法的基本服务
main.ts应用程序入口文件。它使用 NestFactory 用来创建 Nest 应用实例。

这三者的关系可以在代码中看出,模块引入了控制器,控制器注入服务,其中服务就是我们的业务逻辑,实际上我们也可以直接放弃掉服务层,直接在控制器中写入我们的业务逻辑。

TS
// app.controller.ts
import { Controller, Get } from '@nestjs/common';
//import { AppService } from './app.service';

@Controller()
export class AppController {
    //constructor(private readonly appService: AppService) { }

    @Get('/')
    getHello(): string {
        return 'Hello World!';
    }
}

可以尝试启动应用,访问默认地址:http://localhost:3000/

bash
npm run start:dev

创建新的接口

Nest.js 提供强大的自动创建文件命令;根目录下执行命令

bash
nest -h

可以看到一系列的执行命令和对应的注释。我们尝试创建一个列表接口 Posts

  1. 创建 posts 模块
  2. 创建 posts 接口及 Controller
nest g mo posts
nest g co posts

执行命令后可以看到已经自动生成了相关模块的文件及代码

image.png

在控制器中默认添加了 posts 接口前缀

TS
import { Controller, Get, Post } from '@nestjs/common';

@Controller('posts')
export class PostsController {}

Posts 模块在根模块 app 引入

TS
// app.module.ts
@Module({
    imports: [PostsModule],
    controllers: [AppController],
    providers: [AppService],
})
export class AppModule {}

可以在控制器内编写业务接口逻辑

TS
import { Controller, Get, Post } from '@nestjs/common';

@Controller('posts')
export class PostsController {
    @Get()
    index() {
        return 'postIndex';
    }

    @Post()
    create() {
        return {
            success: 0,
        };
    }

    @Get(':id')
    detail() {
        return {
            id: 1,
            content: '内容',
        };
    }
}

基本的增删改查接口全都可以简单实现。

文档 Swagger

Nest.js 完美的融合了 Swagger 接口文档,只要简单的配置下即可。安装对应的依赖。

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

修改 main.ts 入口文件

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

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

    const config = new DocumentBuilder()
        .setTitle('接口文档API') // title
        .setDescription('接口文档API描述') // description
        .setVersion('1.0') // 版本
        // .addTag('cats') // tag
        .build();
    const document = SwaggerModule.createDocument(app, config);
    SwaggerModule.setup('api-docs', app, document);

    await app.listen(3000);
    console.log('start:<http://localhost:3000/>');
}
bootstrap();

接着我们可以访问 http://localhost:3000/api-docs/ 地址看到接口文档内容。接下来可以完善我们的接口文档定义。

TS
import { Controller, Get, Post } from '@nestjs/common';
import { ApiOperation, ApiTags } from '@nestjs/swagger';

@Controller('posts')
@ApiTags('Posts') // 添加接口模块标签
export class PostsController {
    @Get()
    @ApiOperation({
				summary: '获取列表数据'
    }) // 对接口进行描述
    index() {
        return 'postIndex';
    }

    @Post()
    create() {
        return {
            success: 0,
        };
    }

    @Get(':id')
    detail() {
        return {
            id: 1,
            content: '内容',
        };
    }
}

更多的定义可以点击 ApiOperation 装饰器查看。

总结

本章只是简单的介绍 Nest 的创建与文档的定义,从中代码目录可以看到 Nest 是模块化结构,使用各种装饰器来注入定义或者实现逻辑。