这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
nestjs 中文文档:
nestjs 相关的安装:
npm i -g @nestjs/cli //下载nestjs nest new project-name //创建项目
执行文件的方式 yarn start:dev | npm run start:dev
启动成功后,直接访问: localhost:3000 端口即可访问到数据 Hello World!
REST 的设计理念 和结构
我们通过 start:dev 是进行项目打包 最后打包的文件会放到 dist 文件夹内部 dist 是你运行时的文件路径 而src 是你源码路径
当一个模块通过nest 工厂,他会把模块创建好且进行管理,当你需要使用的时候,只需要从工厂中把实例拿出来注入即可。 我们之前都是直接new 对象,但是这种new 难免需要开辟内存空间,很消耗性能,我们通过一个集中的工厂来进行管理,就会很方便。 这里是借用了 Springboard 那套理念
证明:
应用启动了 [Nest] 5872 - 2023/01/29 12:52:57 LOG [NestFactory] Starting Nest application...
依赖初始化 [Nest] 5872 - 2023/01/29 12:52:57 LOG [InstanceLoader] AppModule dependencies initialized +46ms
控制层解析 [Nest] 5872 - 2023/01/29 12:52:57 LOG [RoutesResolver] AppController {/}: +9
get发方法映射好 [Nest] 5872 - 2023/01/29 12:52:57 LOG [RouterExplorer] Mapped {/, GET} route +5ms
应用启动成功 [Nest] 5872 - 2023/01/29 12:52:57 LOG [NestApplication] Nest application successfully started +3ms
因为我们http的请求 是现有请求 才会有响应 请求就是对应的controller 处理也是对应的写在controller 我们创建一个modules 文件夹用来存放对应的模块 modules下再创建一个hello文件夹
src/modules/hello/hello.service.ts
import { Injectable } from '@nestjs/common'
@Injectable()
export class HelloService{
fetch(id):string{
return `Hello World! ${id}`;
}
save(message):string{
return `Set Hello Done.${message}`;
}
update(id: string, message: string):string{
return `Update Hello Done. ${id}: ${message}`;
}
remove(id:number):string{
return `${id} Record Was Removed.`;
}
}
src/modules/hello/hello.controller.ts
import { Controller, Get, Post, Patch, Query, Delete, Body, Param, Headers } from '@nestjs/common'
import { type } from 'os';
import { HelloService } from './hello.service'
@ApiBearerAuth()
@ApiTags('hello')
@Controller('/hello') // 这个结点 我们取名叫做hello 对应的url
export class HelloController { //helloController 控制器
constructor(private readonly helloService: HelloService) { } //helloService将这个服务进行注入
// 以下是对应的控制器内部的 方法
查询
@Get()
fetch(@Query() { id }, @Headers('token') token): string { //Query 查询参数
console.log(token)
return this.helloService.fetch(id);
}
//创建
@Post()
save(@Body() { message }): string { //body 请求体内部的参数
return this.helloService.save(message);
}
//更新
@Patch(':id')
update(@Param() { id }, @Body() { message }): string {
return this.helloService.update(id, message);
}
//删除
@Delete()
remove(@Query() { id }): string {
return this.helloService.remove(id)
}
}
创建完后 需要配置到对应文件的module当中 src/modules/hello/hello.modules.ts
import { Module } from '@nestjs/common';
import { HelloController } from './hello.controller'; //获取Controller
import { HelloService } from './hello.service'; //获取Service
@Module({
controllers: [HelloController],
providers: [HelloService],
})
export class HelloModule {} //导出模块方法
综上设置完 还不够 还需要在最外成的app.module.ts 中进行导入
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { HelloModule } from './modules/hello/hello.module'; //将我们设置的 模块方法导入(需要先导出)
@Module({ //装饰器 Module 装饰器
imports: [HelloModule], //用于导入对应的我们写的依赖模块
controllers: [AppController], //控制器
providers: [AppService], //服务
})
export class AppModule {} //这是一个类 真正起作用的是Module 整体就是一个模块 APP模块
综上所述 在终端执行yarn start:dev 或 npm run start:dev 即可进行对应端口路径的访问 比如:localhost:3000/hello