nestjs 相关的基础操作

112 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天

nestjs 中文文档:

docs.nestjs.cn/9/firststep…

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