0、前言
本章节主要教大家如何使用nestjs进行一个简单的请求
1、新建项目
nest new study-01
这里的包管理工具我们使用pnpm,如果提示没有pnpm的话,使用
npm install -g pnpmnest这个脚手架在上一个章节已经安装了,如果提示没有nest这个命令的话,使用npm install -g @nestjs/cli如果提示
2、认识项目结构
├── src
│ ├── app.controller.spec.ts
│ ├── app.controller.ts
│ ├── app.module.ts
│ ├── app.service.ts
│ └── main.ts
.spac.ts是测试文件,我们这里先不理它,可以将它删掉,后续会单独出文章教大家如何使用单元测试的。
- app.controller.ts: 这个是控制器,负责控制路由的入口
- app.module.ts:这个是一个模块的module文件,
- app.service.ts:这个是一个模块中负责处理事件的,从controller中获取到请求参数后,会调用service中的方法
一个基本的nestjs模块由controller、module、service这三个构成。我们一个一个来分析。
2.1、Controller
顾名思义,控制器就是一个模块路由的入口
// app.controller.ts
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
@Controller() // 声明当前类是一个控制器
export class AppController {
// 依赖注入AppService这个类,会自动实例化赋值给appService的
constructor(private readonly appService: AppService) {}
@Get() // 当前请求为get请求
getHello(): string {
// 控制器中只是处理请求参数,真正的逻辑是在service中的
return this.appService.getHello();
}
}
2.2、Service
顾名思义,服务就是提供服务的
// app.service.ts
import { Injectable } from '@nestjs/common';
@Injectable() // 声明该类是可以被注入的
export class AppService {
// 提供给控制器使用的方法
getHello(): string {
return 'Hello World!';
}
}
2.3、Module
模块,可以理解为是一个nestjs模块的index.ts入口文件
// app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [], // 如果有导入其他nestjs模块的话,则需要在这里导入
controllers: [AppController], // 声明控制器为AppController
providers: [AppService], // 声明提供者为AppService
})
export class AppModule {}
3、案例
上面一大堆可能串不起来。现在我们来一个案例将本节的知识串起来
要求:两个get请求的接口
请求:/study/name
返回: {
name: '张三'
}
请求: /study/age
返回:{
age: 18
}
3.1、在控制器中添加路由
// app.controller.ts
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
@Controller('study') // 声明当前类是一个控制器。里面的值的意思是这个控制器中所有的路由前都添加一个study
export class AppController {
// 依赖注入AppService这个类,会自动实例化赋值给appService的
constructor(private readonly appService: AppService) {}
@Get() // 当前请求为get请求
getHello(): string {
// 控制器中只是处理请求参数,真正的逻辑是在service中的
return this.appService.getHello();
}
// 路由为/study/name
@Get('name')
getName() {
// 调用appService中的方法
return this.appService.getName()
}
// 路由为/study/age
@Get('age')
getAge() {
// 调用appService中的方法
return this.appService.getAge()
}
}
// app.service.ts
import { Injectable } from '@nestjs/common';
@Injectable() // 声明该类是可以被注入的
export class AppService {
// 提供给控制器使用的方法
getHello(): string {
return 'Hello World!';
}
getName() {
return {
age: 18
}
}
getAge() {
return {
name: '张三'
}
}
}
那么现在我们就成功的完成了两个接口,从controller到service
当然了除了案例中的get请求还有其他请求,这些会在后面的章节中讲的。会有不同的装饰器实现不同的请求,获取不同的请求参数。通过本章节你只需要了解到nest如何完成一个请求就好。