A progressive Node.js framework for building efficient and scalable server-side applications.
使用 Nest 编写的数藏说明书后端 Demo
使用如下命令会自动在 src 下创建对应目录及 module 和 controller 文件
# 创建 xxx 模块
nest g module xxx
# 创建 xxx controller
# --no-spec 不生成测试文件
nest g controller xxx --no-spec
# 创建 xxx 服务
nest g service xxx --no-spec
路径统一交给 controller
处理,所以路径添加也在 controller
中,如:
// 根路径为 hc
@Controller('hc')
// 下面写方法
export class HcController {
// 业务路径 list
@Get('list')
getList():any {
return this.hcService.getItemList()
}
}
实际开发中会在域名后,模块前加入公共路径作为业务识别,如:www.xxx.com/api/xxx
,这里只需在 main.ts
文件中的 await app.listen(3000)
代码上一行加入下面代码即可。
app.setGlobalPrefix('api')
get
与 post
请求需要在 controller
中引入对应的模块,获取参数可以使用 Request
模块,也可以对应 get
使用 Query
模块,post
使用 Body
模块来获取参数,并且对应使用 @Query()
装饰器和 @Body()
装饰器
在 get
请求中 query
返回的是字符串,因此 id
一类的需要使用 number
类型的数据需要用 parseInt
方法转换
如果是动态路由需要使用 Request
中的 params
来获取路由参数,或者使用 Param
模块,直接使用 params
来获取路由参数
import { Controller, Get, Post, Request, Query, Body } from '@nestjs/common';
@Post('additem')
addItem(@Body() body): any {
console.log(body)
}
@Get('getItemDetail')
getItemDetail(@Query() query): any {
let id:number = parseInt(query.id)
}
// 动态路由方式
@Get('getItemDetail/:id/:name')
getItemDetail(@Param() params): any {
let id: number = parseInt(params.id)
return this.hcService.getItemDetail(id)
}
在 src 目录下新建文件夹 RESTClient 在目录下新建一个 http 文件,命名为 demo.http
基本使用方法
# get 请求方法
GET http://localhost:3000/xxx HTTP/1.1
# 带有参数
?id=1
# POST 请求方法
POST http://localhost:3000/xxx
# 请求协议
application/type=json
# 请求参数
{
"id": 1,
"name": "柒飝龍"
}
# TypeORM 安装及 MySQL 扩展安装
pnpm install @nestjs/typeorm typeorm mysql2
配置 TypeORM
// app.module.ts
// 引入 typeORM 模块
import { TypeOrmModule } from '@nestjs/typeorm';
@Module({
imports: [
// 配置 TypeORM
TypeOrmModule.forRoot({
// 数据库类型
type: 'mysql',
// 数据库地址
host: 'localhost',
// 数据库端口
port: 3306,
// 用户名
username: '',
// 密码
password: '',
// 数据库名称
database: 'nft-info',
// 重试链接数据库间隔
retryDelay: 500,
// 重试次数
retryAttempts: 10,
// synchronize: true
}),
HcModule,
],
controllers: [],
providers: [],
})
ORM
中的实体其实就是把数据库映射成对象的那个类,这个类可以模拟数据库表,定义其中的字段。
因为映射的过程 ORM
已经为我们做好了,所以我们只需要定义实体类,当实体类定义好以后,就可以操作数据库了,这里所谓的实体就是 Object
flowchart LR;
Object --> Mapping --> DB;
Nest framework TypeScript starter repository.
$ npm install
# development
$ npm run start
# watch mode
$ npm run start:dev
# production mode
$ npm run start:prod
# unit tests
$ npm run test
# e2e tests
$ npm run test:e2e
# test coverage
$ npm run test:cov