创建控制器:nest g co user 创建服务:nest g s user 创建模块:nest g mo user 默认以src为根路径生成
Nest中的控制器层负责处理传入的请求, 并返回对客户端的响应。控制器的目的是接收应用的特定请求。路由机制控制哪个控制器接收哪些请求。通常,每个控制器有多个路由,不同的路由可以执行不同的操作常常是路由相关的信息,比如Get,Post,Delete 请求等信息、
创建好控制器,这个时候会在src目录下面生成一个对应user的文件夹,这个里面就是user的控制器,代码如下:
import { Controller } from '@nestjs/common';
@Controller('posts')
export class PostsController {
}常用的HTTP请求方法的装饰器 @Get() @Post() @Put() 、 @Delete()、 @Patch()、 @Options()、 @Head()和 @All()
@Request() req @Response() res @Next() next @Session() req.session @Param(key?: string) req.params / req.params[key] @Body(key?: string) req.body / req.body[key] @Query(key?: string) req.query / req.query[key] @Headers(name?: string) req.headers / req.headers[name]
nest response的 两种处理机制:
1. 内置标准 -
使用这个内置方法,当请求处理程序返回一个 JavaScript 对象或数组时,它会自动序列化为 JSON。然而,当它返回一个 JavaScript 原始类型(例如,字符串、数字、布尔值)时,Nest 将只发送值而不尝试序列化它。这使得响应处理变得简单:只需返回值,Nest 会处理剩下的事情。
此外,默认情况下响应的状态代码始终为 200,除了使用 201 的 POST 请求。我们可以通过在处理程序级别添加 @HttpCode(...) 装饰器来轻松更改此行为。
2. Express 库 -
可以使用库特定的(例如,Express)响应对象,它可以使用方法处理程序签名中的 @Res() 装饰器注入(例如,findAll(@Res() response))。通过这种方法,可以使用该对象公开的本机响应处理方法。例如,对于 Express,并可以使用类似 response.status(200).send() 的代码构造响应。
如果你想使用 Res 但仍然希望nest 可以内部标准处理响应(对象转JSON),则必须在 @Res({ passthrough: true }) 装饰器中将 passthrough 选项设置为 true。
Nestjs中的服务可以是service 也可以是provider。他们都可以通过 constructor 注入依赖关系。服务本质上就是通过@Injectable() 装饰器注解的类。在Nestjs中服务相当于MVC的Model. 服务用于请求逻辑处理。
每个 Nest 应用程序至少有一个模块,即根模块。根模块是 Nest 开始安排应用程序树的地方。事实上,根模块可能是应用程序中唯一的模块,特别是当应用程序很小时,但是对于大型程序来说这是没有意义的。在大多数情况下,您将拥有多个模块,每个模块都有一组紧密相关的功能。
模块组成:
providers 由 Nest 注入器实例化的提供者,并且可以至少在整个模块中共享 controllers 必须创建的一组控制器 imports 导入模块的列表,这些模块导出了此模块中所需提供者 exports 由本模块提供并应在其他模块中可用的提供者的子集
模块之间的provider 是不能共享的,彼此之前相互独立,如果需要引入其他模块的Provider 方法。有两种方法:
方法一 : 直接在A模块中provider 引入B 模块service的类。
方法二: 现在B模块中export 导出B service(及此类在其他模块中共享),然后在A 模块中import 引入B模块即可:imports: [BModule]
www.haizhuan.tk