全栈系列之nestjs快速入门 – 2

250 阅读3分钟

0、前言

本章节主要教大家如何使用nestjs进行一个简单的请求

1、新建项目

nest new study-01

这里的包管理工具我们使用pnpm,如果提示没有pnpm的话,使用 npm install -g pnpm nest这个脚手架在上一个章节已经安装了,如果提示没有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模块由controllermoduleservice这三个构成。我们一个一个来分析。

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: '张三'
    }
  }
}

那么现在我们就成功的完成了两个接口,从controllerservice

当然了除了案例中的get请求还有其他请求,这些会在后面的章节中讲的。会有不同的装饰器实现不同的请求,获取不同的请求参数。通过本章节你只需要了解到nest如何完成一个请求就好。