nest-todo
使用 React.js + Nest.js 实现一个简单的 Todo App。
基础账号
测试数据会默认添加 user 和 admin 两个用户,当然还会有 100 多个测试账号,下面是这两个账号的 username
和 password
(密码在入库时做了 digest)。
用户 | 密码 | 角色 |
---|---|---|
user | user | 普通用户 |
admin | admin | 管理员 |
样例
- 前端:localhost:3000
- 后端:localhost:4200
- Swagger 文档:localhost:4200/docs
功能
- user 和 todo 两个资源的 CRUD 接口
- 数据库模块:TypeORM x mariadb(不用 mysql 是因为 M1 电脑无法使用 mysql 镜像),数据库迁移,数据库 seed
- 文件上传模块,使用 Express 的 Multer 实现
- 配置文件模块,使用 ConfigModule 读取本地 ENV 变量
- 日志模块,ReportLogger 模拟日志上报
- 静态资源模块,使用 StaticModule 使现
- 用户身份验证:local 和 jwt 两种策略
- 用户角色验证:区分普通用户和管理员两种角色
- Docker 部署环境
- Swagger 构建 API 文档
- WebSocket 实现数据传输
- Http 模块,http 的转发功能
- Error 模块,出错时,拦截错误,并按一定格式输出
- Transform 模块,以规定格式返回数据
- Task Scheduling 定时推送消息
- 编写单元测试
- 编写 e2e 测试
本地运行
使用 docker-compose 的方式来启动 redis, mariadb 2 个容器。
一般来说本地开发都会使用
npm run start
这样的命令来启动项目,就不用放在 docker-compose 里一键启动了。 不过,为了大家也能学习到怎么用 docker-compose 一键本地运行,所以也注释后的脚本放在 docker-compose 里了。
docker-compose -f dev-docker-compose.yml up -d
然后,初始化数据库结构和数据内容。
# 进入后端目录
cd server
# 数据库迁移
npm run migration:run
# 插入初始数据
npm run db:seed
开启后端。
cd server
npm run start:dev
最后,开启前端。
cd client
npm run start
访问 http://localhost:3000 即可。
生产部署(可忽略)
docker-compose -f prod-docker-compose.yml up -d --build
然后再次初始化数据库和数据:
npm run migration:run
npm run db:seed
打开 http://localhost 即可访问。
测试
目前只有 /server
Nest.js 的服务有提供测试(毕竟这是个 Nest.js 的练手项目),所以第一步先进入 /server
目录。
cd server # 进入 server
单元测试
Nest.js 提供了 Jest 来写单元测试。
npm run test
e2e 测试
Jest 依然可以用来写 e2e 测试,这里还要配合 supertest 这个库来编写测试用例。
注意:在运行 e2e 测试前,需要先启动缓存和数据库,具体请看上面的 docker 运行。
npm run test:e2e
技术栈
前端
- React.js
- Sass
- TypeScript
后端
- Nest.js
- TypeScript
- TypeORM
- MariaDB
- Redis
- Swagger