手機(jī)端怎么網(wǎng)站建設(shè)seo標(biāo)簽優(yōu)化
nest.js學(xué)習(xí)筆記(一)
- 一、安裝nest.js
- 前置條件
- 運(yùn)行項(xiàng)目
- 目錄介紹
- 二、nest.js cli 常用命令
- 三、RESTful 風(fēng)格設(shè)計(jì)
- 1.接口url
- 2.RESTful 版本控制
- 四、獲取前端傳過(guò)來(lái)的參數(shù)
- 1.獲取Get請(qǐng)求參數(shù)
- 2.獲取Post請(qǐng)求參數(shù)
- 3.動(dòng)態(tài)路由
- 4.獲取Header信息
- 5.自定義狀態(tài)碼
nest.js 英文官網(wǎng) NestJS - A progressive Node.js framework
nest.js 中文網(wǎng) NestJS 簡(jiǎn)介 | NestJS 中文文檔 | NestJS 中文網(wǎng)
nest.js 中文網(wǎng)2 Nest.js 中文文檔
一、安裝nest.js
前置條件
請(qǐng)確保您的操作系統(tǒng)上安裝了 Node.js(>= 12, v13 版本除外)。
安裝完成node之后可以運(yùn)行下面的npm安裝命令來(lái)全局安裝Nest CLI
// 全局安裝nestjs腳手架 npm i -g @nestjs/cli// 創(chuàng)建新項(xiàng)目 nest new project-name
運(yùn)行項(xiàng)目
下邊幾個(gè)為運(yùn)行/打包命令,如果需要熱更新 啟動(dòng)npm run start:dev 如不需要,運(yùn)行npm run start即可
"start": "nest start","start:dev": "nest start --watch","start:debug": "nest start --debug --watch","start:prod": "node dist/main",
ps:如果感覺(jué)start:dev有些長(zhǎng),也可以直接改為dev,后面運(yùn)行npm run dev就可以了
目錄介紹
核心文件簡(jiǎn)要概述
app.controller.ts 帶有單個(gè)路由的基本控制器示例。 app.controller.spec.ts 對(duì)于基本控制器的單元測(cè)試樣例 app.module.ts 應(yīng)用程序的根模塊。 app.service.ts 帶有單個(gè)方法的基本服務(wù) main.ts 應(yīng)用程序入口文件。它使用 NestFactory
用來(lái)創(chuàng)建 Nest 應(yīng)用實(shí)例。
核心文件介紹
- main.ts 入口文件主文件 類似于vue 的main.ts
通過(guò) NestFactory.create(AppModule) 創(chuàng)建一個(gè)app 就是類似于綁定一個(gè)根組件App.vue
app.listen(3000); 監(jiān)聽(tīng)一個(gè)端口
- Controller.ts 控制器
可以理解成vue 的路由 private readonly appService: AppService 這一行代碼就是依賴注入不需要實(shí)例化 appService 它內(nèi)部會(huì)自己實(shí)例化的我們主需要放上去就可以了
- app.service.ts
這個(gè)文件主要實(shí)現(xiàn)業(yè)務(wù)邏輯的 當(dāng)然Controller可以實(shí)現(xiàn)邏輯,但是就是單一的無(wú)法復(fù)用,放到app.service有別的模塊也需要就可以實(shí)現(xiàn)復(fù)用
二、nest.js cli 常用命令
查看所有命令:
nest --help // 可以查看nestjs所有的命令
以上命令可以根據(jù)需要,自動(dòng)生成對(duì)應(yīng)的文件,如感覺(jué)一個(gè)個(gè)生成的太慢,可以直接使用一個(gè)命令生成整套CURD
nest g resource study // resource可以全寫,也可以使用res簡(jiǎn)寫
此處一般選用第一項(xiàng)就可以,如果是第一次使用這個(gè)命令,除了生成文件之外還會(huì)自動(dòng)使用
npm
幫我們更新資源,安裝一些額外的插件,后續(xù)再次使用就不會(huì)更新了。
如圖所示,一套標(biāo)準(zhǔn)的CURD模板就生成好了
此處我更改了端口號(hào),默認(rèn)端口號(hào)為3000
三、RESTful 風(fēng)格設(shè)計(jì)
RESTFUL 是一種網(wǎng)絡(luò)應(yīng)用程序的設(shè)計(jì)風(fēng)格和開發(fā)方式,基于HTTP,可以使用XML格式定義或JSON格式定義。RESTFUL適用于移動(dòng)互聯(lián)網(wǎng)廠商作為業(yè)務(wù)接口的場(chǎng)景,實(shí)現(xiàn)第三方OTT調(diào)用移動(dòng)網(wǎng)絡(luò)資源的功能,動(dòng)作類型為新增、變更、刪除所調(diào)用資源。
1.接口url
傳統(tǒng)接口
- 利用?來(lái)拼接到URL地址進(jìn)行數(shù)據(jù)參數(shù)傳輸,且不支持Post方式,Post方式需要在請(qǐng)求體中攜帶參數(shù)
http://localhost:8080/api/get_list?id=1 http://localhost:8080/api/delete_list?id=1 http://localhost:8080/api/update_list?id=1
RESTful 接口
- 利用/來(lái)拼接到URL地址進(jìn)行數(shù)據(jù)傳輸,一個(gè)接口就會(huì)完成 增刪改差 他是通過(guò)不同的請(qǐng)求方式來(lái)區(qū)分的
// 查詢GET 提交POST 更新 PUT PATCH 刪除 DELETE http://localhost:8080/api/get_list/1
2.RESTful 版本控制
版本 | 備注 |
---|---|
URI Versioning | 版本將在請(qǐng)求的 URI 中傳遞(默認(rèn)) |
Header Versioning | 自定義請(qǐng)求標(biāo)頭將指定版本 |
Media Type Versioning | 請(qǐng)求的Accept 標(biāo)頭將指定版本 |
- 在main.ts文件中開啟版本控制
- 在study.controller 配置版本(共兩種方式,如果在Controller 內(nèi)配置,則頁(yè)面內(nèi)所有的請(qǐng)求路徑都必須加上版本,如果單獨(dú)配置則僅需要在單獨(dú)配置的路徑加上版本即可)
四、獲取前端傳過(guò)來(lái)的參數(shù)
nest.js提供了許多的方法參數(shù)裝飾器 用來(lái)幫助我們快速獲取參數(shù) 常用的裝飾器如下
方法 | 參數(shù) |
---|---|
@Request() /@Req() | req |
@Response() /@Res() | 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] |
@HttpCode() |
1.獲取Get請(qǐng)求參數(shù)
- 使用
@Request()
裝飾器來(lái)獲取到前端傳過(guò)來(lái)的參數(shù),同理,使用@Req()也是一樣的效果,這里我就不演示了,下圖中打印的req為整個(gè)Request的內(nèi)容,通過(guò)req.query獲取到對(duì)應(yīng)的參數(shù)ps:裝飾器后邊跟的參數(shù)(req)可以隨便寫
- 因?yàn)楂@取到的參數(shù)在Request中的query中存放,也可以直接使用 @Query()來(lái)獲取,此時(shí)效果是一樣的,就不需要再通過(guò)req.query獲取參數(shù)了
import { Controller, Get, Request,Query } from '@nestjs/common';
import { StudyService } from './study.service';// @Controller({
// path: 'study',
// version: '1',
// })
@Controller('study')
export class StudyController {constructor(private readonly studyService: StudyService) {}// @Get()// getParams(@Request() req) {// console.log(req);// return {// data: req.query,// status: 200,// };// }@Get()getParams(@Query() query) {console.log(query);return {data: query,status: 200,};}
}
2.獲取Post請(qǐng)求參數(shù)
- Post請(qǐng)求與上邊Get請(qǐng)求類似,不同的是傳的值存放在body中,而不是query中,需要利用res.body草可以獲取到值
- 和@Query()修飾器一樣,可以利用@Body()修飾器來(lái)直接獲取到參數(shù),結(jié)果也是一樣的,除此之外,@Body()修飾器也支持直接讀取key
import { Body, Controller, Post } from '@nestjs/common';
import { StudyService } from './study.service';// @Controller({
// path: 'study',
// version: '1',
// })
@Controller('study')
export class StudyController {constructor(private readonly studyService: StudyService) {}// @Post()// getPost(@Request() req) {// console.log(req.body);// return {// data: req.body,// status: 200,// };// }@Post()getPost(@Body('name') body) {console.log(body);return {data: body,status: 200,};}
}
3.動(dòng)態(tài)路由
- 此處和上面@Request() 用法一樣,就不贅述了,直接上結(jié)果
import { Controller, Get, Param } from '@nestjs/common';
import { StudyService } from './study.service';// @Controller({
// path: 'study',
// version: '1',
// })
@Controller('study')
export class StudyController {constructor(private readonly studyService: StudyService) {}@Get(':id')getParams(@Param() params) {console.log(params);return {data: params,status: 200,};}
}
4.獲取Header信息
此處我拿動(dòng)態(tài)路由來(lái)舉例子,無(wú)論get請(qǐng)求還是post,都可以獲取到Header信息
import { Controller, Get, Headers } from '@nestjs/common';
import { StudyService } from './study.service';// @Controller({
// path: 'study',
// version: '1',
// })
@Controller('study')
export class StudyController {constructor(private readonly studyService: StudyService) {}@Get(':id')getParams(@Headers() headers) {console.log(headers);return {data: headers,status: 200,};}
}
5.自定義狀態(tài)碼
- 在@HttpCode()中直接寫數(shù)字就可以,但也不能寫的特別離譜的數(shù)字(建議按照標(biāo)準(zhǔn)狀態(tài)碼來(lái)寫),否則看不到返回的參數(shù)
常見(jiàn)Code碼規(guī)范
狀態(tài)碼 | 代表的意思 |
---|---|
200 | OK 連接成功 |
304 | Not Modified 協(xié)商緩存了 |
400 | Bad Request 參數(shù)錯(cuò)誤 |
401 | Unauthorized token錯(cuò)誤 |
403 | Forbidden referer origin 驗(yàn)證失敗 |
404 | Not Found 接口不存在 |
500 | Internal Server Error 服務(wù)端錯(cuò)誤 |
502 | Bad Gateway 上游接口有問(wèn)題或者服務(wù)器問(wèn)題 |