您的位置:首页 > 娱乐 > 明星 > 一文入门【NestJs】Controllers 控制器

一文入门【NestJs】Controllers 控制器

2024/10/6 14:27:22 来源:https://blog.csdn.net/weixin_43742274/article/details/140325826  浏览:    关键词:一文入门【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 即可实现一套比较完整的业务逻辑。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com