@36node/template-service
Development
# prepare service with docker
docker-compose -d
# install dependencies
yarn
# start service
yarn start
# if we want to start service as production
# NODE_ENV=production yarn start
# use postman to check api
yarn test:int
Folder structures
├── Dockerfile
├── README.md
├── bin
│ ├── build-docker.sh
│ ├── bump.sh
│ ├── server.js
│ └── sync.js
├── docker-compose.yml
├── jest-mongodb-config.js
├── openapi.yml
├── package.json
├── src
│ ├── api
│ ├── app.js
│ ├── config
│ ├── constants.js
│ ├── index.js
│ ├── jobs
│ ├── lib
│ ├── middlewares
│ ├── models
│ └── services
├── ssl
│ ├── rsa_jwt.key
│ └── rsa_jwt.pub
└── test
├── env.json
├── jest.config.js
├── jest.setup.js
├── jest.teardown.js
└── pet-curd
- bin: 防止入口文件以及一些编译辅助的脚本。
- src: source 目录只负责输出模块。
- src/api: 自动生成的 api 目录包含 koa 桩代码
- src/config: 配置入口,用 dotenv
- src/lib: 基础库
- src/middleware: koa 中间件
- src/services: api 的实现
- src/jobs: 实现 deamon 等任务逻辑
- src/app.js: 主程序
- src/index.js: 引用目录
- test: 集成测试
- openapi.yml: api 定义文件
- docker-compose.yml: 服务需要依赖的第三方服务
目录引用原则:
- config 被全局引用
- services and jobs 引用 models
- lib 目录可以被任何文件引用
default token
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJ1c2VyIjp7InJvbGVzIjpbIkFETUlOIiwiVVNFUiJdfX0.XA1kE_UdbOsU0rfmG3g1y3SpJ5aFVzPGFBHihVXv58sNatweqLHPEUAwhqobgKgmAbaKa3dlYrXEpHESHZ7AJgQYCfSeVxtsKyoQmcq9OYA0iFcH5oCWQgYqfeWJPOroMlMdNQax5kG-GkuaFbIiwiw-9j_ACS8CSPO9Oq2dQCA
visit jwt.io for more.
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022,
"user": {
"roles": ["ADMIN", "USER"]
}
}
postman
# 安装 fastman
yarn global add @36node/fastman
# You can get your key from the [integrations dashboard](https://go.postman.co/integrations/services/pm_pro_api)
fastman config -a <your-postman-api-key>
# list all your collections in your postman
fastman ls
# import file into postman, import data.json env.json by your self
fastman import ./test/xxxx/collection.json
# export file from postman
fastman export "Petstore Service" ./test/xxxx/collection.json
Url Pattern
Find more in @36node/sketch/docs/url.md
权限定义
动态角色
- PET_STORE_OWNER 指 pet's owner
固定角色
- PET_STORE_BREEDER: 饲养员
- USER(保留角色): 普通用户,其实是一个无角色
- ADMIN(保留角色): 包含所有角色的所有权限,测试中不一一测试,单元测试中做一次 ADMIN 角色解析,看是否能够解析成所有角色即可。
有两个用户可以用于测试
- Admin
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiNWNiOWE0ZWRjNDhhZDQwMDEyMGQyOGEwIiwiZXhwIjoyNTU3MDM1MjU4LCJyb2xlcyI6WyJBRE1JTiJdLCJucyI6Ii9hZHZlbnR1cmVyIn0.DJ7lG-6cI5E8dIq8o6cIk5YCS66GV75Km7EW03GxGzWxigQm6hZsqVeGRruyrwJ6De-3VrS9Rcz7srdPyZpyzHV1VaHd_Xxw1iY2UKPwiVZsnvLgcNIwFQmar6E3pQaBxyT7PT8E4aNwhKPcVDWs-D8Osi5QH6HftFMoW-ZHQJ0
{
"user": "5cb9a4edc48ad400120d28a0",
"exp": 2557035258,
"roles": ["ADMIN"],
"ns": "/adventurer"
}
- User
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiNWNiOWE0ZWRjNDhhZDQwMDEyMGQyOGIwIiwiZXhwIjoyNTU3MDM1MjU4LCJucyI6Ii9hZHZlbnR1cmVyIn0.gKb4bRq2RN_gFO03nYDYgjeqTsNdTvmjcnjLbvSfmXVRbX2B0jxl0gaPN31EKfOg1GKkRUxY-y9oqYITajOAcfqfUFGj4p-42iXL8IFiKO8aLmmQl7AuTo_Z0wfL630w8ZSeunfJ4VhbucaCzghzBHPqdD73QdibqNOyK0S8s8E
{
"user": "5cb9a4edc48ad400120d28b0",
"exp": 2557035258,
"ns": "/adventurer"
}
Contributing
- Fork it!
- Create your feature branch:
git checkout -b feature/something
- Commit your changes:
git commit -am 'feat: something'
- Push to the branch:
git push -u origin feature/something
- Submit a pull request :D
Author
tpl-service © 36node, Released under the MIT License. Authored and maintained by 36node with help from contributors (list).
github.com/zzswang · GitHub @36node