前言
本章节主要简单介绍通过nestjs CLI
快速创建 nestjs 项目和 API 接口模块,再通过 postman 请求接口。由 demo 引入 nestjs 核心 Module
概念,让同学们更好入手 nestjs 应用
demo 效果(postman 请求自定义的接口)
环境
需要需要本地支持node环境运行,具体下载node环境请点击
1. 创建nestjs项目
首先全局安装 @nestjs/cli
并创建项目hello-nestjs
shell
npm i -g @nestjs/cli
nest new hello-nestjs
创建过程中安装方式可选默认npm
回车即可,安装成功后切换到项目目录并运行npm
指令启动项目:
shell
cd hello-nestjs
npm run start:dev
启动成功后方式初始接口,使用postman
get 请求 localhost:3000,将返回Hello World!
2. 目录代码解读
通过nestjs Cli 创建的项目目录:
css
hello-nestjs/
├── src/
│ ├── app.controller.ts
│ ├── app.controller.spec.ts
│ ├── app.module.ts
│ ├── app.service.ts
│ └── main.ts // 启动入口文件
├── test/
├── node_modules/
├── .eslintrc.js
├── .prettierrc
├── nest-cli.json
├── package.json
├── tsconfig.build.json
└── tsconfig.json
这里我们介绍主要的文件,其中入口文件main.ts
:
ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
这是应用程序的入口文件。它使用 NestFactory
来创建一个 Nest 应用实例,并监听指定的端口(这里是 3000)
项目根模块 app.module.ts
ts
// app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
所有后续开发添加的模块都需要imports
被根模块所引用,类似于如图:
基本控制器AppController
,控制器处理传入的 HTTP 请求,并返回响应。这里定义了一个 GET
请求的处理器 getHello
ts
// AppController
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
}
基础服务 AppService
,它包含了业务逻辑,一般服务于控制层,这里的 getHello
方法返回一个简单的字符串。
ts
// app.service.ts
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
}
}
3. 自定义个Module
通过上述主要文件功能介绍,同学们应该有一定了解文件功能了,接下来创建命名个cat
模块,这里通过nest cli
脚手架快速创建该模块
shell
nest g mo cat # 创建模块
nest g co cat --no-spec # 创建controller层
nest g s cat --no-spec # 创建service服务层
其中 cat
为模块名称, --no-spec
为不创建单元测试文件,有兴趣的同学可以点击了解(cli 文档)
这时在src
目录下会新增个cat
目录,该目录包括如下文件:
1.cat.module
模块入口
2.cat.controller
api 接口控制层
3.cat.service
基础服务处
nest cli
会自动把新生成的CatModule
模块imports
注册到根模块
diff
// app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
+ import { CatModule } from './cat/cat.module';
@Module({
imports: [
+ CatModule
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
接下来在控制层CatController
创建个get
方式的接口
ts
// cat.controller
import { Controller, Get } from '@nestjs/common';
@Controller('cat')
export class CatController {
@Get()
create(): string {
return 'This action adds a new cat'
}
}
通过postman
访问localhost:3000/cat
请求方式为:GET
,将返回字符串:This action adds a new cat
日常开发中 controller
请求后的业务逻辑处理和具体返回会在service
层中处理,所以cat.controller
中引入 cat.service
基础层,由cat.service
具体返回值
diff
// cat.controller
import { Controller, Get } from '@nestjs/common';
+ import { CatService } from './cat.service';
@Controller('cat')
export class CatController {
// 构造时注入 CatService
+ constructor(private readonly catService: CatService) { }
@Get()
create(): string {
- return 'This action adds a new cat'
+ return this.catService.createCat()
}
}
ts
// cat.service.ts
import { Injectable } from '@nestjs/common';
@Injectable()
export class CatService {
createCat(): string {
return 'This action adds a new cat(form CatService)'
}
}
再次访问localhost:3000/cat
将返回字符串:This action adds a new cat(form CatService)
总结
本章节主要介绍简单出创建nest
项目和自定义模块接口,nest应用是从 App.module
根模块为基础,后续新增模块都需要再 App.module
中 imports
,而每个模块内部有:module
(模块层),controller
(控制层) service
(基础服务处)