/backend-nestjs

一个NestJS开箱即用快速开发模板

Primary LanguageTypeScript

Nest Logo + Fasity Logo

基于NestJS和Fastify的NodeJS后端快速开发模板

更适合**·前端·开发宝宝

❓为什么是Nest+Fastify

  • NestJS的项目文件结构性更好,切片编程好用,基础功能完善基本开箱即用
  • Fastify 比 Express 更快

🎯 目标

做一个开箱即用的快速开发模板。前端开发人员无需关注底层建设,只需要关心新增业务。

相比ServerLess,它的后台部分不会因为过多因素而导致臃肿和冗余,完全贴近国内前端开发人员习惯,支持迅速接入微信登录,云OSS。

模板底层已实现JWT,CSRF,XSS,CORS,配置清晰,模块明确。

将全面使用NodeJS(NestJS)+TypeScript 进行后台动能开发。

🔬 建议

因为是第一次使用NestJS搭一个完整结构项目(是说包含持久化,上传,身份认证等),以及也是第一次较大范围使用TypeScript,所以目前还有较多的地方可以进行完善及优化。

所以,如果你对NodeJS及NestJS感兴趣,希望通过这个项目进行学习,你可以在Issue或者掘金上和一起讨论一起学习。

如果你在企业级业务需要使用,本项目只能在一些思路和实现方式上当做参考模板,由于没有实际的生产使用,所以不太能保证功能的稳定及健壮。

如果你只是个人的小型项目使用,如公众号文章推送,或者自己的博客社区,这个应该能够完全cover住。

💎 模板能力

🎬 在线Demo

该后端服务的前端项目:https://github.com/heifengli001/faster-template-frontend-admin-with-arco

🔨使用

📖 学习

🔗 功能

  • 基础能力
    • 敏感词过滤 (sensitive-word-tool)
    • 安全
      • helemt
      • xss
        • dompurify (html文本内容过滤)
        • csp使用helmet
      • csrf
        • @fastify/csrf-protection
        • @fastify/cookie
      • cors
    • 全局异常处理
      • 自定义异常
      • 拦截及异常捕获处理
      • 特定异常处理转换
    • 统一输出格式
      • 使用 ResponseInterceptor + Filter 实现
    • 日志
      • Winston
    • Crypto加密及解密
      • 密码加密及校验
      • 手机号脱敏及加密
    • 定时器
      • 过期验证码定时清理
  • 实体基类
    • 基类定义
      • 普通基类
      • 树形基类(使用物化路径实现)
    • 基类仓储服务
      • 分页
      • where
      • 树节点创建
      • 树子类查询
      • 树根查询
      • 树排序
  • 基础功能
    • 登录授权(JWT)
      • 微信
      • 用户名和密码
      • 手机+验证码 (此处未对接短信运营商,如需使用自行处理)
    • 角色鉴权守卫
      • 超管
      • 普通角色
    • 文件上传
      • 可扩展的OSS服务
        • 已实现对接七牛云OSS (七牛云有10G免费,所以做了对接)
      • 图片压缩
        • Sharp
  • 基础业务
    • 树形结构分类(Category)
    • 富文本文章(Article)
    • 草稿箱(Draft)
    • 素材管理(Material)
    • 评论模块(Comment)
      • 评论为树形结构(继承自树形基类)
    • 点赞模块(Like)
  • 插件/配置
    • 初始生成默认超管用密(仅开发环境)
    • 默认启动swagger文档(仅开发环境)
    • 全局验证器(ValidationPipe)
    • FormData处理(fastifyMultipart)

⚙️ 文件结构

在变量以及文件夹命名上,其实挺头疼的,我尽量做到代码即注释,从最开始写到现在我的项目结构和文件命名已经完全不同,继续加油吧

|configs # 配置
|const # 常量
|core # 基类及扩展仓储
|decorators # 装饰器 (参数封装,Dto装饰器)
|exception # 统一错误处理
|filters # 错误过滤
|guards # 守卫 认证,角色,csrf
|interceptors # 拦截器 处理request及response,csrf
|modules # 业务模块
|plugins  # 插件
|schedule-task # 定时任务
|utils # 工具方法
|main.ts # 入口
|app.module.ts # 根module

👾 接口文档及调测

🚥 TODO

  • 底层能力
    • 对接Sentry完成监控模块,将后端日志从winston本地迁移到sentry
    • 构建Docker部署File,达到一键部署
  • 基础业务支持
    • 短信平台对接
    • 用户+角色+权限 完整设计
  • 开发体验
    • 全面使用TypeScript对项目进行优化
    • 接入文档整理

🦁 关于我

License

MIT licensed.