Nest Controller
在NestJS中,Controller是应用程序的核心组件之一。它负责处理传入的请求并返回响应。Controller充当了路由的处理器,将传入的请求映射到相应的处理函数上。
在这个【NestJS学习日记】系列的本篇中,我们将重点探索NestJS中的Controller。我们将学习如何创建和组织Controller,如何处理不同类型的请求,以及如何在Controller中实现各种功能。
NestJS的Controller使用装饰器来定义路由和请求处理函数。我们可以使用@Controller
装饰器来创建一个Controller类,然后使用@Get
、@Post
、@Put
等装饰器来定义处理不同HTTP方法的请求的方法。
通过使用NestJS的Controller,我们可以轻松地创建RESTful API,定义路由和请求处理逻辑,并将它们组织在一起。我们还可以使用依赖注入来注入其他服务或依赖项,实现更高级的功能和复杂的业务逻辑。
在接下来的文章中,我们将深入研究NestJS中Controller的各个方面,包括路由处理、请求参数获取、响应处理、中间件的使用和错误处理等。通过学习NestJS的Controller,我们将能够构建出强大而灵活的后端应用程序。让我们一起开始这个令人兴奋的学习之旅,掌握NestJS的Controller的技能!
作者:markzzw 时间:2024-1-29 线上代码:CodeSandbox Github:zhangzewei/nest-learning-tutorial
改变路由
nest 通过 Controller 装饰器进行路由的处理,在新建的 nest 项目中,app.controller.ts
为主路由,即访问 '/' 就能匹配到,不过也可以修改 @Controller('app')
,将访问路径改为 '/app',即需要访问 '/app' 才能够匹配到 app.controller.ts
app.controller.ts
ts
@Controller('app')
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
}
Get 请求
这段代码中可以看到 getHello
方法被一个 @Get
装饰器装饰,这个装饰器就是用来匹配get请求的,下方的函数就是用于处理匹配到的get请求的处理函数,getHello
只是一个函数名字,可以更换为其他例如: getA 或者 getB,重要的是函数内部是处理匹配的路由的方法。
Get 装饰器中可以传入一个字符串作为路径匹配,达到更精确的处理,例如: @Get('hello')
,那么就会匹配到 'app/hello' 路径。
还可以传入参数,用冒号指代参数,例如: @Get('hello/:name')
,然后我们在处理函数里面需要用到 @Param('name')
,获取到参数。
@Param 获取路径参数
ts
@Get('hello/:name')
getHello(@Param('name') name: string): string {
return `Say hello to ${name}`;
}
在代码中,getHello
函数新增一个 name 传入参数,使用 @Param('name')
进行修饰,就能够在 getHello
中获取到路径中的 name 参数;同样 传入参数
不一定为与路径中的参数同名,可以为其他的形参,只要 @Param
传入的字符串与路径参数一样就行。
Post 请求
与 Get 请求类似,nestjs 提供了 @Post
装饰器对post请求进行匹配,将路径传入 @Post
装饰器,然后在postman进行post请求,就能够匹配得到。
@Body 获取请求 body
在 post 请求中,我们使用了另一个装饰器 @Body
对传入参数进行修饰,使的参数能够获取到请求中的 body,如上图所示。
Put 请求
Post 请求一般是使用于新增,put 一般使用于更改请求,所以在 put 请求中会带入某个特定的参数,例如:id参数;用来对该特定数据进行修改。所以在 put 请求中会同时使用到 @Param 和 @Body 装饰器。
Delete 请求
Delete 请求也可以通过 @Param
获取需要删除的对象的id或者关键字进行删除。
总结
以上就是 nestjs controller 的 restful API 的基本用法:get
、post
、put
、delete
,也提到了获取路径参数和body的方法。