HTTP 状态码 errors
400
请求的业务被拒绝401
鉴权失败403
权限不足/请求参数需要访客为管理员角色404
资源不存在405
无此方法500
服务器挂了200
正常201
POST 正常
数据特征码 response.interface.ts
status
:success
:正常error
:异常
message
:永远返回,由responsor.decorator
装饰error
:一般会返回错误发生节点的 error;在status
为error
的时候必须返回,方便调试debug
:开发模式下为发生错误的堆栈,生产模式不返回result
:在status
为success
的时候必须返回- 基本数据:例如文章,直接输出数据如
{ title: '', content: '', ... }
- 列表数据:一般返回
{ pagination: {...}, data: {..} }
- 基本数据:例如文章,直接输出数据如
通用
extend
为数据表的通用扩展结构Extend Model
- 文章、分类、Tag 表都包含
extend
字段,用于在后台管理中自定义扩展,类似于 WordPress Custom Fields
各表重要字段
_id
:MongoDB 生成的 ID,一般用于后台执行 CRUD 操作id
:插件生成的自增数字 ID,类似 MySQL 中的 ID,具有唯一性,用于前台获取数据pid
:父级数据 ID,用于建立数据表关系,与 ID 字段映射
数据组成的几种可能
- 数据库真实存在数据
- 业务计算出的衍生数据,非存储数据,如:统计数据
- Mongoose 支持的 virtual 虚拟数据
入口
main.ts
:引入配置,启动主程序,引入各种全局服务app.module.ts
:主程序根模块,负责各业务模块的聚合app.controller.ts
:主程序根控制器app.config.ts
:主程序配置,数据库、程序、第三方,一切可配置项app.environment.ts
:全局环境变量
请求处理流程
request
:收到请求middleware
:中间件过滤(跨域、来源校验等处理)guard
:守卫过滤(鉴权)interceptor:before
:数据流拦截器(本应用为空,即:无处理)pipe
:参数格式化/校验器,参数字段权限/校验,参数挂载至request
上下文controller
:业务控制器service
:业务服务interceptor:after
:数据流拦截器(格式化数据、错误)filter
:捕获以上所有流程中出现的异常,如果任何一个环节抛出异常,则返回错误
鉴权处理流程
guard
:守卫 分析请求guard.canActivate
:继承处理JwtStrategy.validate
:调用 鉴权服务guard.handleRequest
:根据鉴权服务返回的结果作判断处理,通行或拦截
鉴权级别
- 任何写操作(CUD)都会校验必须的 Token
admin-only.guard.ts
- 涉及表数据读取的 GET 请求会智能校验 Token,无 Token 或 Token 验证生效则通行,否则不通行
admin-maybe.guard.ts
参数校验逻辑
- 任何用户的请求参数不合法,将被校验器拦截,返回 400
validation.pipe.ts
- 普通用户使用高级查询参数将被视为无权限,返回 403
permission.guard.ts
错误过滤器 error.filter.ts
拦截器 interceptors
- 缓存拦截器:自定义此拦截器为弥补框架不支持 ttl 参数的缺陷
- 数据流转换拦截器:当控制器所需的 Promise service 成功响应时,将在此被转换为标准的数据结构
- 数据流异常拦截器:当控制器所需的 Promise service 发生错误时,错误将在此被捕获
- 日志拦截器:补充默认的全局日志
装饰器扩展 decorators
- 缓存装饰器:用于配置
cache key / cache ttl
- 响应装饰器:用于输出规范化的信息,如
message
和 翻页参数数据 - 请求参数装饰器:用户自动校验和格式化请求参数,包括
query/params/ip
等辅助信息 - 访客请求装饰器:用于装饰
class-validate
中的子字段,为其增加一些供permission.pipe
消费的配置项元数据
守卫 guards
- 默认所有非 GET 请求会使用
AdminOnlyGuard
守卫鉴权 - 所有涉及到多角色请求的 GET 接口会使用
AdminMaybeGuard
进行鉴权
中间件 middlewares
CORS
中间件,用于处理跨域访问Origin
中间件,用于拦截各路不明请求
管道 pipes
validation.pipe
用于验证所有基于class-validate
的验证类的数据格式合法性permission.pipe
用于验证所有数据(格式已合法)的权限合法性
业务模块 modules
Announcement
Article
Category
Tag
Comment
Option
Auth
:全局鉴权、Token、用户(Admin)Vote
:赞踩评论、文章、主站Disqus
:外接 Disqus 的业务服务Archive
:全站数据缓存Expansion
- 统计:业务数据统计业务
- 备份:数据库备份业务(定时、手动)
- 其他:其他第三方 token 等服务
核心(全局)模块 processors
database
- 连接数据库和异常管理
cache
- 基本的缓存数据
set
get
del
等操作 - 扩展的
once
manual
interval
schedule
几种缓存模式
- 基本的缓存数据
helper
- 搜索引擎实时更新服务:根据入参主动提交搜索引擎收录,支持百度、Google 服务;分别会在动态数据进行 CUD 操作的时候调用
- 评论过滤服务:使用 Akismet 过滤 SPAM;暴露三个方法:校验 SPAM、提交 SPAM、提交 HAM
- 邮件服务:根据入参发送邮件;程序启动时会自动校验客户端有效性,校验成功则根据入参发送邮件
- IP 地理查询服务:根据入参查询 IP 物理位置;使用一些免费在线服务
- 第三方云存储服务:AWS 云存储相关服务
- Google 证书(鉴权)服务:用于生成各 Google 应用的服务端证书
- OAuth 2.0 客户端 ID、服务帐号密钥 都是 OAuth 授权类型
- Auth 申请及管理页面