/nest-template-base

nest基础模版

Primary LanguageTypeScript

Nest Logo

Deploy

待办

  • 日志集成链路追踪
  • 上传文件Demo
  • 分片上传、下载文件Demo
  • 集成爬虫模块
  • passport实现用户鉴权、扫码登录
  • 微服务、Monorepo模版

集成工具

Husky

项目已集成 Eslint、Prettier、Commitlint,Git提交时进行校验

Swagger

http://127.0.0.1:3000/doc

Compodoc

$ pnpm run compodoc

Typeorm、Redis

Typeorm使用nest提供的动态模块
项目中将Redis也封装为了动态模块

export class Xxx {
  @Inject()
  private readonly redis: Redis;
}

Axios请求工具

参考接口:/axios-example

export class Xxx {
  @Inject('Axios')
  private readonly axios: AxiosInstance;
}

日志

export class Xxx {
  @Inject()
  private readonly logger: CustomLogger;
}

项目接口请求、响应日志已集成到日志中

[Nest] [2024-07-17 10:25:56.913] [2e81f11d-d3d6-45f1-b692-53f07c175fde] [info] [请求] [POST][/user/login]
[Nest] [2024-07-17 10:25:56.929] [2e81f11d-d3d6-45f1-b692-53f07c175fde] [info] [响应] [POST][/user/login][201] 接口响应内容

提供装饰器 @NoResponseLog() 关闭项目接口响应日志

发起三方请求、响应日志已集成到日志中(使用Axios发起请求)

[Nest] [2024-07-17 10:27:10.126] [616864ba-45f6-4768-8747-c66ad5e97e46] [info] [外部请求] [GET][https://httpbin.org/get]
[Nest] [2024-07-17 10:27:11.326] [616864ba-45f6-4768-8747-c66ad5e97e46] [info] [外部响应] [GET][https://httpbin.org/get][200] 接口响应内容

日志已集成traceId链路追踪

Console输出第三位 [616864ba-45f6-4768-8747-c66ad5e97e46] 就是traceId

静态资源服务器

资源放置于 /src/public/ 目录下

# 请求静态资源
http://127.0.0.1:3000/static/xxx

Demo样例

基于角色鉴权

src/user # user模块实现了 登录拦截器、鉴权拦截器

邮件样例

src/email/email.module.ts

定时任务样例

src/scheduler/scheduler.controller.ts

SSE样例

src/app.controller.ts

接口:/real-time-log
前端页面:http://127.0.0.1:3000/static/real-time-log.html

WebSocket样例

src/socket/socket.gateway.ts 

参考接口:socket.gateway.ts下全部接口
前端页面:http://127.0.0.1:3000/static/socket.html

安装依赖

$ pnpm install

运行App

# 本地开发模式
$ pnpm start:dev

# 生产模式
$ pnpm start:prod

部署App

本项目使用 Github Action部署 ,提交PR到deploy分支即可自动部署

注意1:请提前配置.github/workflows/deploy.yml 文件中的secret字段

注意2:Dockerfile、ecosystem.config.cjs的路径均是相对于构建目录dist

项目结构依赖

$ pnpm compodoc

数据库迁移

# 生成迁移文件
$ migration:generate

# 执行迁移文件
$ migration:run

# 撤回迁移
$ migration:revert

测试

# 单元测试
$ pnpm run test

# e2e测试
$ pnpm run test:e2e

# 覆盖率
$ pnpm run test:cov

License

Nest is MIT licensed.