nestjs学习笔记(一):环境搭建与模式粗略分析
该系列其他文章:
nestjs学习笔记(二):使用webpack热重载nestjs
简要提一下安装过程
nestjs是nodejs的一套基于express和typescript实现的服务端框架。之所以学习它是因为它相较其他nodejs框架比较更加系统和工程化。
github: https://github.com/nestjs/nest
英文文档: https://docs.nestjs.com
中文文档: https://docs.nestjs.cn/5.0/firststeps
腾讯云文档: https://cloud.tencent.com/developer/section/1490165
nestjs安装以及脚手架初始化项目:
$ npm i -g @nestjs/cli
$ nest new my-project #填写你项目名字
之后进入my-project 目录安装相关依赖项。
cd my-project
npm install
大功告成,现在我们已经搭建好工程了!!
nestjs的目录结构
src
├── app.controller.ts
├── app.module.ts
└── main.ts
这在官方文档里都有,这里我按照我自己的理解进行一些简单类比,如有错误请多多指正。
module.ts
定义一个模块,module是nestjs的核心,其内部引入了 控制器(controller) 和对应 服务提供者(service),模块可以引入子模块的依赖。刚入门感觉nest使用这种方式对每个模块进行了解耦。
controller.ts
nest默认隐藏了路由,当定义controller的时候,默认路由就是创建controller时的修饰器函数里传递的参数
@Controller('cats')
export class CatsController {}
例如定义了controller:CatsController,注意在类上方的修饰器函数传递的参数:“cats”, 那么默认这个控制器影响的路由就是:xxx/cats
控制器中可以定义针对同一路由的不同请求访问,不同的解决方案:
get方式访问/cats 并且不携带id等参数
访问url: xxx/cats
@Get()
async findAll(): Promise<any> {
return 'hello world';
}
get方式访问/cats 携带两个id参数
访问url: xxx/cats/我是id1/我是id2
@Get(':id1/:id2')
async findOne(@Param() params): Promise<any> {
// 控制器中获取
return `This action returns a #${params.id1} & #2${params.id2} cat`;
}
post方式访问/cats
一般用于创建新对象
其中reqParamsObject为post 请求体中携带的参数对象
@Post()
async create(@Body() reqParamsObject: ReqParamsObject): Promise<any> {
return `This action adds a new cat ${JSON.stringify(reqParamsObject)})`;
}
put方式访问/cats
一般用于更新
访问方式:xxx/cats/这是cat的id
同时携带请求体的更改参数
@Put(':id')
update(@Param('id') id, @Body() updateCatDto) {
return `This action updates a #${id} cat`;
}
delete方式访问/cats
@Delete(':id')
remove(@Param('id') id) {
return `This action removes a #${id} cat`;
}
main.ts
主程序的入口,启动服务的地方。内部引入了NestFactory用于依赖注入。通过Factory引入对应模块依赖。
如有不足请多多指正!!!