这里是我的个人博客 Ryan's Blog 站点的后端 Api。
基于 Nestjs 开发,使用 PostgreSQL 作为数据存储,提供 REST API 和 GraphQL 两种 Api。
- Authenticate users
- Users can CRUD articles
- Database - PostgreSQL
- REST API - NestJS
- GraphQL API - NestJS
- Rest & GraphQL Frontend - React with Ant-Design & Apollo Clientv
-
HTTP 状态码(详见 errors )
400
请求的业务被拒绝401
鉴权失败403
权限不足/请求参数需要更高的权限404
资源不存在405
无此方法500
服务器挂了200
正常201
POST 正常
-
数据特征码(详见 http.interface.ts )
status
:success
:正常error
:异常
message
:永远返回(由 http.decorator 装饰)error
:一般会返回错误发生节点的 error;在status
为error
的时候必须返回,方便调试debug
:开发模式下为发生错误的堆栈,生产模式不返回result
:在status
为success
的时候必须返回- 列表数据:一般返回
{ pagination: {...}, data: {..} }
- 具体数据:例如文章,则包含直接数据如
{ title: '', content: ... }
- 列表数据:一般返回
-
入口
main.ts
:引入配置,启动主程序,引入各种全局服务app.module.ts
:主程序根模块,负责各业务模块的聚合app.controller.ts
:主程序根控制器app.config.ts
:主程序配置,数据库、程序、第三方,一切可配置项app.environment.ts:
全局环境变量
-
请求处理流程
request
:收到请求middleware
:中间件过滤(跨域、来源校验等处理)guard
:守卫过滤(鉴权)interceptor:before
:数据流拦截器(本应用为空,即:无处理)pipe
:参数提取(校验)器controller
:业务控制器service
:业务服务interceptor:after
:数据流拦截器(格式化数据、错误)filter
:捕获以上所有流程中出现的异常,如果任何一个环节抛出异常,则返回错误
-
鉴权处理流程
guard
:守卫 分析请求guard.canActivate
:继承处理guard.validateToken
:调用 鉴权方法guard
:根据鉴权服务返回的结果作判断处理,通行或拦截
-
拦截器 interceptors
-
装饰器 decorators
-
守卫 guards
- 默认所有请求会使用 Auth 守卫鉴权
-
管道 pipes
- 用于验证所有基于 class-validate 的验证类 ValidationPipe
$ npm install
# 开发
$ npm run start:dev
# 构建
$ npm run build
# 调试
$ npm run start:debug
# 生产环境运行
$ npm run start:prod
# 语法检查
$ npm run lint
# 测试
$ npm run test
$ npm run test:watch
$ npm run test:cov
$ npm run test:debug
$ npm run test:e2e