大体上是一个论坛系统的后端
本项目是由官方nestjs/cli开始从头构建,边写边学Node后端的产物。因为没有明确目标,所以一直在改需求和逻辑,寻找更优解。
基础框架:nestjs
数据库:mongoDB
ORM框架:typegoose
缓存:redis
对象存储:minio
权限安全:bcryptjs passport-jwt passport-local
────src
├── common #装饰器、守卫、拦截器、过滤器、工具函数等
├── config #全局配置
├── db #数据库连接相关
├── interface #存放数据库schema和ts类型
└── module #业务功能模块
除了实现了用户,文章,评论基本的增删改查,还有以下
权限安全相关:
1. 用户注册使用bcryptjs对密码进行盐加密
2. 用户登陆使用passport-local守卫策略,比对数据库中bcrypt加密后的密码,比对通过后将用户信息交给jwt生成token并存入redis进行缓存
3. 没有@Public公共装饰器的接口都会通过jwt守卫,先经过jwt的一级验证,再比对redis缓存的最新登陆的token,实现单设备登陆。
4. 通过jwt守卫的接口将获得token中对应的用户信息,为接口中的业务逻辑提供身份判定
接口相关:
1. 用拦截器统一返回类型,该Response Type跟前端共享(res.data)
2. 用异常过滤器捕获throw出的各种不同类型的异常,并统一外层code(res)为200,将业务code封入Response(res.data)内
3. 使用mongoose的populate填充引入其他表的信息,比如from字段填入用户表信息
对象存储相关:
1. 使用前端直传,对域名前缀使用正则替换的方案
2. 在业务接口中对所有涉及文章封面cover,内容content,用户头像avatar字段的接口进行正则替换
3. 考虑添加图片处理服务中间件,类似阿里云oss的图片处理服务
$ yarn install
# development
$ yarn start
# watch mode
$ yarn nest
# production mode
$ yarn build
$ yarn start:prod