一文入门【NestJs】Controllers 控制器

Nest学习系列

✈️一文带你入门【NestJS】

✈️前言

流程图
在这里插入图片描述
Controllers 控制器主要负责处理传入请求,并向客户端返回响应,控制器可以通过路由机制来控制接收那些请求,通常一个Controllers种会有多个匹配路由,不同的路由可以知情不同操作,我们可以通过装饰器将类与所需要的元数据关联,使得Nest能够将路由映射到对应的控制器。

⚠️注意:我们这里所说的路由并不是前端页面上的路由,而是我们调用api接口的路由

🚩如何创建 controller

//通过nest-cli 脚手架命令处理
nest g controller [name] 

在这里插入图片描述
在这里插入图片描述

🚩基础概念

  1. 路由:
    @Controller(‘news’)
    装饰器中的news 作为可选路径前缀,利用这个我们可以对controller进行分组
    @Get 为Http 请求方法装饰器,代表我们的请求方法
    @Get(‘/page’),在请求方法装饰器种添加自定义路径之后,结合Controller 中的可选路径,会组合形成
    /news/page
    在这里插入图片描述
    在这里插入图片描述

  2. 请求对象
    在这里插入图片描述

  3. 通配符
    @Get(‘abcd’)
    'ab
    cd’ 路由路径将匹配 abcd、ab_cd、abecd 等。字符 ?、+、* 和 () 可以在路由路径中使用,并且是它们对应的正则表达式的子集。连字符 (-) 和点 (.) 由基于字符串的路径逐字解释。

  4. 状态码
    @HttpCode() 装饰器来设置对应Http 状态码,默认 200

@Post()
@HttpCode(204)
create() {return 'This action adds a new news';
}
  1. 重定向
    要将响应重定向到特定 URL,你可以使用 @Redirect()
@Get()
@Redirect('https://nest.nodejs.cn', 301)
  1. 获取路由参数

@Query方式

http://localhost:3000/news/page?id=2222&keyword=%27sss%27

在这里插入图片描述

@Param方式

 http://localhost:3000/news/page/5
  1. 异步性

Nest 支持 async await 与 RxJS 的观察流模式,可以通过这两种方式实现 异步

在这里插入图片描述

  1. 请求负载

@Body()

在这里插入图片描述

注意:在接受参数之前我们需要确定DTO架构,我们可以先用TS的接口或者类实现一个简单的DTO
建议使用类实现,因为接口在TS转换JS的过程会被删除,在运行时候可能访问不到

🚩实例代码

news.controller.ts

import { Controller,Get,Post, Put,Delete,Redirect, Param,Query, Body  } from '@nestjs/common';
import { Request,Response, query } from 'express';
import { Observable, of } from 'rxjs';
import { CreateNewsDto,UpdateNewsDto } from './create-news.dto'
@Controller('news')
export class NewsController {@Get('/page')// @Redirect('https://nest.nodejs.cn')getNewsPageList(@Query() query: string): string {console.log(query);return 'This is the news page111';}@Get('/detail/:id')getNewsById(@Param() params: string): string {console.log(params);return 'This is the news detail page';}// 异步 async @Get('/async')async getNewsList(): Promise<string> {setTimeout(() => {console.log('This is the async news list');}, 2000);return 'This is the async news list';}// 异步 Observable 模式@Get('/observable')getNewsListObservable(): Observable<any[]> {return of([]);}@Post('/create')createNews(@Body() createNewsDto: CreateNewsDto): string {console.log(createNewsDto,'添加参数');return 'This is the create news message';}@Put('/update/:id')updateNews(@Body() updateNewsDto: UpdateNewsDto): string {return 'This is the update news message';}@Delete('/delete/:id')deleteNews(): string {return 'This is the delete news message';   }}

create-news.dto

export class CreateNewsDto {title: string;tag: string;author: string;content: string;}export class UpdateNewsDto {id:number;title: string;tag: string;author: string;content: string;
}

🚩结语

这篇文章主要介绍了Nest的Controller 控制器,简洁明了,实现了一个基础的新闻模块增删改查的框架,后端增加对应的service 即可实现一套比较完整的业务逻辑。

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

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

相关文章

Spring源码二十一:Bean实例化流程四

上一篇Spring源码二十&#xff1a;Bean实例化流程三中&#xff0c;我们主要讨论了单例Bean创建对象的主要方法getSingleton的内部方法createBean&#xff0c;createBean方法中的resolveBeanClase方法与prepareMethodOverrides方法处理了lookup-method属性与repliace-method配置…

MT3046 愤怒的象棚

思路&#xff1a; a[]存愤怒值&#xff1b;b[i]存以i结尾的&#xff0c;窗口里的最大值&#xff1b;c[i]存以i结尾的&#xff0c;窗口里面包含✳的最大值。 &#xff08;✳为新大象的位置&#xff09; 例&#xff1a;1 2 3 4 ✳ 5 6 7 8 9 则ans的计算公式b3b4c4c5c6b7b8b9…

【记录】LaTex|LaTex 代码片段 Listings 添加带圆圈数字标号的箭头(又名 LaTex Tikz 库画箭头的简要介绍)

文章目录 前言注意事项1 Tikz 的调用方法&#xff1a;newcommand2 标号圆圈数字的添加方式&#xff1a;\large{\textcircled{\small{1}}}\normalsize3 快速掌握 Tikz 箭头写法&#xff1a;插入点相对位移标号node3.1 第一张图&#xff1a;插入点相对位移3.2 第二张图&#xff1…

【MindSpore学习打卡】应用实践-LLM原理和实践-基于MindSpore实现BERT对话情绪识别

在当今的自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;情绪识别是一个非常重要的应用场景。无论是在智能客服、社交媒体分析&#xff0c;还是在情感计算领域&#xff0c;准确地识别用户的情绪都能够极大地提升用户体验和系统的智能化水平。BERT&#xff08;Bidirec…

imx6ull/linux应用编程学习(12)CAN应用编程基础

关于裸机的can通信&#xff0c;会在其他文章发&#xff0c;这里主要讲讲linux上的can通信。 与I2C,SPI等同步通讯方式不同&#xff0c;CAN通讯是异步通讯&#xff0c;也就是没有时钟信号线来保持信号接收同步&#xff0c;也就是所说的半双工&#xff0c;无法同时发送与接收&…

C++基础篇(1)

目录 前言 1.第一个C程序 2.命名空间 2.1概念理解 2.2namespace 的价值 2.3 namespace的定义 3.命名空间的使用 4.C的输入输出 结束语 前言 本节我们将正式进入C基础的学习&#xff0c;话不多说&#xff0c;直接上货&#xff01;&#xff01;&#xff01; 1.第一个C程…

【Linux进阶】文件系统8——硬链接和符号连接:ln

在Linux下面的链接文件有两种&#xff0c; 一种是类似Windows的快捷方式功能的文件&#xff0c;可以让你快速地链接到目标文件&#xff08;或目录)&#xff1b;另一种则是通过文件系统的inode 链接来产生新文件名&#xff0c;而不是产生新文件&#xff0c;这种称为硬链接&…

base SAS programming学习笔记10(combine data)

1.一对一合并 基本格式如下&#xff1a; data output-data-set; set data-set1; set data-set2;(data-set1和data-set2可以是相同的数据集&#xff0c;可以添加多个set 语句来实现上述的一对一合并) run; 输出数据集结果如下&#xff1a; a.会包含所有输入数据的变量名&#x…

小米手机永久删除的照片怎么找回?这两个方法千万不要错过!

小米手机永久删除的照片怎么找回&#xff1f;身为米粉发烧党的小编又双叒叕手残了&#xff01;本来想在手机回收站中恢复一张照片&#xff0c;结果一个稀里糊涂就把照片点成了“永久删除”。于是乎难得的休班假期&#xff0c;就变成了小编恢复永久删除照片的漫漫之路。以下是小…

org.springframework.boot.autoconfigure.EnableAutoConfiguration=XXXXX的作用是什么?

org.springframework.boot.autoconfigure.EnableAutoConfigurationXXXXXXX 这一配置项在 Spring Boot 项目中的作用如下&#xff1a; 自动配置类的指定&#xff1a; 这一配置将 EnableAutoConfiguration 设置为 cn.geek.javadatamanage.config.DataManageAutoConfiguration&…

【2024_CUMCM】TOPSIS法(优劣解距离法)

目录 引入 层次分析法的局限性 简介 例子 想法1 想法2 运用实际分数进行处理 想法3 问题 扩展问题&#xff1a;增加指标个数 极大型指标与极小型指标 统一指标类型-指标正向化 标准化处理 计算公式 计算得分 对原公式进行变化 升级到m个指标和n个对象 代码 …

系统分析师-基础知识

基础知识 一、计算机组成与结构1、计算机系统基础知识1.1 计算机硬件组成1.2 中央处理单元&#xff08;CPU&#xff09;1.3 数据表示1.3.1 R进制转十进制&#xff1a;1.3.2 十进制转R进制&#xff1a; 1.4 校验码&#xff08;3种校验码&#xff09;1.4.1 基本知识1.4.2 奇偶校验…

D-DPCC: Deep Dynamic Point Cloud Compression via 3D Motion Prediction

1. 论文基本信息 发布于&#xff1a; 2022 2. 创新点 首先提出了一种端到端深度动态点云压缩框架(D-DPCC)&#xff0c;用于运动估计、运动补偿、运动压缩和残差压缩的联合优化。提出了一种新的多尺度运动融合(MMF)模块用于点云帧间预测&#xff0c;该模块提取和融合不同运动流…

首届UTON区块链开发者计划大会在马来西亚圆满落幕

7月9日&#xff0c;首届UTON区块链开发者计划大会在马来西亚吉隆坡成功举办&#xff01; 来自全球顶尖的行业领袖、技术精英和众多区块链爱好者参与了此次盛会&#xff0c;也标志着UTON区块链生态进入了一个全新的发展阶段。 会上&#xff0c;UTON区块链创始人之一唐毅先生以“…

Python 中什么是递归函数,如何编写递归函数?

递归是计算机科学中的一种基本概念&#xff0c;它指的是函数调用自身的编程技巧。在Python中&#xff0c;递归函数是一种通过调用自身来解决问题的函数。这种方法常用于解决可以被分解为较小相同问题的场景&#xff0c;例如阶乘计算、斐波那契数列、全排列生成等。 一、递归的…

TCP 握手数据流

这张图详细描述了 TCP 握手过程中&#xff0c;从客户端发送 SYN 包到服务器最终建立连接的整个数据流转过程&#xff0c;包括网卡、内核、进程中的各个环节。下面对每个步骤进行详细解释&#xff1a; 客户端到服务器的初始连接请求 客户端发送 SYN 包&#xff1a; 客户端发起…

添加点击跳转页面,优化登录和注册页路由

一、给注销按钮添加点击跳转至登录页 1、在路由中添加登录页路由 2、自定义登录页面 3、在app.vue页面找到下拉框组件&#xff0c;添加点击事件 4、使用vue-router中的useRoute和useRouter 点击后可以跳转&#xff0c;但是还存在问题&#xff0c;路径这里如果我们需要更改登录…

JavaScript 作用域 与 var、let、const关键字

目录 一、JavaScript 作用域 1、全局作用域 2、函数作用域 3、块级作用域 4、综合示例 5、总结 二、var、let、const 1、var 关键字 2、let 关键字 3、const 关键字 4、总结 5、使用场景 一、JavaScript 作用域 在JavaScript中&#xff0c;作用域是指程序中可访问…

神经网络构成、优化、常用函数+激活函数

Iris分类 数据集介绍&#xff0c;共有数据150组&#xff0c;每组包括长宽等4个输入特征&#xff0c;同时给出输入特征对应的Iris类别&#xff0c;分别用0&#xff0c;1&#xff0c;2表示。 从sklearn包datasets读入数据集。 from sklearn import darasets from pandas impor…

vulnhub-NOOB-1

确认靶机 扫描靶机发现ftp Anonymous 的A大小写都可以 查看文件 解密 登录网页 点击about us会下载一个压缩包 使用工具提取 steghide info 目标文件 //查看隐藏信息 steghide extract -sf 目标文件 //提取隐藏的文件 steghide embed -cf 隐藏信息的文件 -ef…