起步
Nest
是一个高效构建 Node.js
应用程序的框架。
安装
推荐使用 Nest CL
建立新项目。
$ npm i -g @nestjs/cli
$ nest new project-name
当依赖下载完成后,可以看到基本的结构目录,存在核心文件:Controller
,Module
,Service
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
- 创建
posts
模块 - 创建
posts
接口及Controller
nest g mo posts
nest g co posts
执行命令后可以看到已经自动生成了相关模块的文件及代码
在控制器中默认添加了 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
是模块化结构,使用各种装饰器来注入定义或者实现逻辑。