一文入门【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 即可实现一套比较完整的业务逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值