NEST.JS使用心得

news2024/11/17 19:32:11

最近部门分享了nest.js技术,旨在前端人员通过项目积累将可重复使用的数据或者自己需要的数据通过nest设计出接口方便快速开发,不需要等待后端开发人员的数据。学习了两天发现nest很有意思,所以来分享下最近两天的学习心得。

nest中文文档:https://www.kancloud.cn/juukee/nestjs/2670089

构建nest初始框架就不必说了,网上很多教程,初始化框架后我们需要创建module层controller层与service层,这里有nest快捷构建方式如下:

创建模块
$ nest g mo [文件名] [文件地址]
创建控制器
$ nest g co [文件名] [文件地址]
创建server
$ nest g s [文件名] [文件地址]

注:文件地址可以不写

我这里举例创建到034项目文件夹的module文件

代码: nest g mo xm034 034

依次生成后项目出现了如下:

034文件夹下data是我mock的json数据,dto是我们设置参数的地方,还有一个pipe是设置管道的地方(这个以后再讲),生成完毕后我们直接打开xm034.module.ts(你创建的module文件)文件将controller层与service层引入进来:

import { Module } from '@nestjs/common';
import { Xm034Controller } from './xm034.controller';
import { Xm034Service } from './xm034.service';

@Module({
  controllers: [Xm034Controller],
  providers: [Xm034Service]
})
export class Xm034Module {}

然后进入controller层编写接口逻辑

import { ApiBody, ApiTags } from '@nestjs/swagger';
import {
  Controller,
  Get,
  HttpStatus,
  Res,
  Query,
  Post,
    Body,
    DefaultValuePipe,
    ParseUUIDPipe
} from '@nestjs/common';
import { Xm034Service } from './xm034.service';
import { createPostDto } from './dto/034dto';
import { Response } from 'express';
import {
  ApiCreatedResponse,
  ApiHeader,
  ApiInternalServerErrorResponse,
  ApiOkResponse,
  ApiOperation,
  ApiParam,
  ApiQuery,
  ApiProperty,
  ApiResponse,
} from '@nestjs/swagger';

@ApiTags('034项目')
@Controller('xm034')
export class Xm034Controller {
  constructor(private readonly xm028: Xm034Service) {}
  @Get('getStation')
  //设置token
  // @ApiHeader({
  //     name: 'Authorization',
  //     description: 'Auth token',
  //   })
  //设置接口描述
  @ApiOperation({
    summary: '根据地区获取站点数据',
    tags: ['getEra5'],
    description: '根据地区国家获取站点数据,传空返回全部站点数据,地区有美国、中国、印度、俄罗斯',
    deprecated: false,
  })
  @ApiQuery({ name: 'country', description: '国家或者地区,传空返回全部', required: true })
      
//   @ApiQuery({ name: 'type', description: '要素', required: true })
  async getStation(
    @Res() res: Response,
     @Query('country') country: String,
  ) {
    const data = this.xm028.getStation(country);
    res.status(HttpStatus.OK).json({
      code: HttpStatus.OK,
      msg: '请求成功',
      data: data,
    });
  }
    @Post('getEra5Pngdata')
      //声明一个就可以后面加type对应的dto类swagger会全部显示,不加type只显示声明的这个
  @ApiParam({ name: 'type', type: createPostDto })
  @ApiOperation({
    summary: '获取三维体球era5图片数据',
    description: '根据要素获取era5图片,要素包括:地面温度-TEM2,海平面气压-SPR,相对湿度-RHU,总云量-TCC,低云量-LCC,降水量-TPE,风速-10WIN,温度-TEM,经向风-WIU,纬向风-WIV',
  })
  async getEra5Pngdata(@Res() res: Response, @Body() Body: createPostDto) {
    const data = this.xm028.getEra5Pngdata(Body);
    res.status(HttpStatus.OK).json({
      code: HttpStatus.OK,
      msg: '请求成功',
      data: data,
    });
  }
}

记得我们需要引入swagger,这部分默认已经引入不会引入的可以百度,swagger给我们提供了很多修饰器,比如@ApiTags('034项目')是来控制sawgger文档左侧标签文字,@Controller('xm034')用来设置接口前缀,@ApiQuery用来修饰get方式的参数说明,我们可以看下post传参时我们设置了一个dto类,这里面规定了post传参的参数类型,dto代码如下:

import { ApiProperty } from '@nestjs/swagger';
  export class createPostDto{
	//可以在swagger中显示
    @ApiProperty({description:'要素包括:地面温度-TEM2,海平面气压-SPR,相对湿度-RHU,总云量-TCC,低云量-LCC,降水量-TPE,风速-10WIN,温度-TEM,经向风-WIU,纬向风-WIV'})
    readonly type: string;
    //可以在swagger中显示
    @ApiProperty({description:'高度,地面要素不传'})
    readonly press: string;
}
  

接下来我们进入service层,这里处理进一步逻辑,之前我传参发现swagger加引号和不加引号参数是不一样的,所以需要我们对参数进行进一步处理,这里我本来想加管道控制下,但是管道学的不是很好暂时没用,所以我直接用js对参数进行了截切处理:

import { Injectable } from '@nestjs/common';
import { station } from './data/stationdata'
import { era5data} from './data/era5data'
@Injectable()
export class Xm034Service {
  getEra5Pngdata(val) {
    switch (val.type) {
      case 'TEM2':
        return era5data['TEM2']
        break;
      case 'SPR':
        return era5data['SPR']
        break;
      case 'RHU':
        return era5data['RHU']
        break;
      case 'TCC':
        return era5data['TCC']
        break;
      case 'LCC':
        return era5data['LCC']
        break;
      case 'TPE':
        return era5data['TPE']
        break;
        case '10WIN':
            return era5data['10WIN']
        break;
      case 'TEM':
        return era5data['TEM']
        break;
      case 'WIU':
        return era5data['WIU']
        break;
      case 'WIV':
        return era5data['WIV']
        break;
      default:
        return [];
        break;
    }
  }
  getStation(val) { 
        let str=val.replace(/\"/g, "");
        if (str.length>0) {
            switch (str) {
                case '美国':
                    return station[str]
                    break;
                    case '中国':
                        return station[str]
                    break;
                    case '俄罗斯':
                        return station[str]
                    break;
                    case '印度':
                        return station[str]
                        break;
                default:
                    return []
                    break;
            }
        } else { 
             return [...station['美国'],...station['中国'],...station['俄罗斯'],...station['印度']]
        }
    }
}

接下来我们直接看swagger结果:

 

 

 

我是小丁,

祝你牛逼

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/107496.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux下使用命令TC进行网络限流 —— 筑梦之路

Linux 下的流量控制原理 通过对包的排队,我们可以控制数据包的发送方式。这种控制,称之为数据整形,shape the data,包括对数据的以下操作: 增加延时 丢包 重新排列 重复、损坏 速率控制 在 qdisc-class-filter 结构下&#x…

ADI Blackfin DSP处理器-BF533的开发详解64:电子相册的设计(含源码)

硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 代码实现功能 代码实现了将 SD 卡根目录下的所有文件进行文件列表,然后将 480*272 尺寸的 JPEG 文件进行 JPEG 解码,将解…

校园跳蚤市场平台/校园二手交易系统

摘 要 本文论述了校园跳蚤市场平台的设计和实现,该网站从实际运用的角度出发,运用了计算机网站设计、数据库等相关知识,网络和Mysql数据库设计来实现的,网站主要包括学生注册、学生登录、浏览商品、搜索商品、查看商品并进行购买…

Blender——“苹果”建模

效果图 1.调出点线面面板,衰减编辑 1.1打开blender,点击常规,按A全选物体(摄像头、光源、正方体),按delete删除。 1.2 在3D视图中添加一个经纬球。点击添加,选择网格—>经纬球。 1.3 点击下…

前端JS也可以连点成线(Vue中运用 AntVG6)

前言 什么是 G6?G6 是一个图可视化引擎。它提供了图的绘制、布局、分析、交互、动画等图可视化的基础能力。旨在让关系变得透明,简单。让用户获得关系数据的 Insight。其实说白了就是我们前端中的绘图工具;基于 G6,用户可以快速搭…

Linux基础知识-文件目录结构及基本属性

1、前言 上一篇我们讲到了Linux 文件类型7种类型,本篇我们说说Linux文件目录结构。 2、Linux 目录树 所有可操作的计算机资源都存在于目录树这个结构中,对计算资源的访问,可以看做是对这棵目录树的访问。Linux 的目录结构如下:…

常见日志框架使用及日志打印规范设计

文章目录一、slf4j 简介二、常用日志框架1)log4jpom 依赖log4j.properties 文件配置测试参考2)logbackpom 依赖logback.xml 配置测试参考3) java.util.logging4)commons loggingpom 依赖配置测试参考5)slf4j-simplepom…

MFC UI控件相关

文章目录UI控件相关CDialog::OnInitDialog() 对话框初始化手动添加UpdateData() 刷新窗口数据DoDataExchange()数据与控件动态绑定afx_msg: 声明一个消息响应函数void AFXAPI DDX_Control( CDataExchange* pDX, int nIDC, CWnd& rControl );DDV_MaxChars()UI控件相关 CDia…

20天学会Rust第一天之Helloword

阿sir今天开始学习Rust了,至于为什么学习呢? 以后再说 我们都知道,程序设计 数据结构 算法。 因此,我们依次学习Rust中数据结构的定义&算法的实现,然后用它们实现一个简单的“hello world” 数据结构 Rust提供…

什么是IoC和AOP

IoC是什么? 控制反转:面向对象的设计的理念。上层建筑依赖下层建筑 理解:行李箱设计 轮子 --> 底盘 --> 箱体 --> 行李箱 如果改动轮子,则底盘、箱体、行李箱都需要进行调整。 依赖注入:将底层类作为参数…

Spring之底层架构核心概念-BeanFactory 与ApplicationContext

目录1.BeanFactory2.ApplicationContext3.关系4.总结1.BeanFactory BeanFactory是一个接口 public interface BeanFactory {xxx... }2.ApplicationContext ApplicationContext 也是一个接口,继承自ListableBeanFactory, HierarchicalBeanFactory public interfa…

非零基础自学Golang 第15章 Go命令行工具 15.2 代码获取(get) 15.3 格式化代码(fmt)

非零基础自学Golang 文章目录非零基础自学Golang第15章 Go命令行工具15.2 代码获取(get)15.3 格式化代码(fmt)第15章 Go命令行工具 15.2 代码获取(get) go get命令用于从远程仓库中下载安装远程代码包,这是我们常用且非常重要的指令。 我们在开发程序时往往需要引…

Gateway网关-网关作用介绍

为什么需要网关? 如果允许任何人访问微服务,查看我们的敏感业务,这样数据是不是不安全。如果是我们的工作人员并且有相应的查看权限,我们才提供访问权限。那谁来做这件事呢?就是我们的网关。 网关的功能作用 1&#xf…

鼎镁科技冲刺上交所:年营收18亿 拟募资13亿

雷递网 雷建平 12月21日鼎镁新材料科技股份有限公司(简称:“鼎镁科技”)日前递交招股书,准备在上交所主板上市。鼎镁科技计划募资12.86亿元。其中,8.84亿元用于轻量化新材料生产、研发建设项目,2.53亿元用于…

消息号F5155处理办法

消息号F5155(没有公司代码XDJT中买卖双方的资金权限)处理办法 OBA4先检查用户的FI容差组 OB57查看分配用户给容差组,确认是否书写正确的容差组。

《疫情下的编程岁月》序言导读目录

导读 《疫情下的编程岁月》是一部为初学者编写的编程指南,作者是一名 13 岁的编程学习者和优质技术博主。在这部指南中,作者分享了自己在过去 5 年里学习编程技术的经历,并提供了宝贵的建议和技巧,帮助初学者更好地了解编程学习的…

math@间断点@微积分基本定理@变限积分求导公式

文章目录间断点第一类间断点跳跃间断点可去间断点例第二类间断点微积分定理第一基本定理变上限积分函数的导数定积分的角度原函数存在定理😊应用例例微积分第二基本定理变限积分求导公式例math间断点微积分基本定理变限积分的求导公式 间断点 第一类间断点 跳跃间…

SwiftUI开源库之 什么是 Lottie?Airbnb 的跨平台开源库,用于渲染矢量运动图形

什么是 Lottie Lottie是 Airbnb 的跨平台开源库,用于渲染矢量运动图形。我们在 Airbnb 广泛使用 Lottie,它还为整个行业的数千个其他应用程序中的动画提供支持。 发布了适用于 iOS 的Lottie 4.0 。这个主要的新版本通过由 Core Animation 提供支持的全新渲染引擎,为所有 L…

Flutter开发:仿iOS侧滑删除效果的实现

前言 在Flutter开发中,基于原生移动端开发的思想也会运用到混合开发中,尤其是原生移动的的好的特性和交互效果更是如此。在现在的发展情况下,Flutter下的混合开发已经越来越替代原生移动的开发,同时也会继承原生开发的优点&#x…