Skip to content
项目

zmts/supra-api-nodejs

在 GitHub 查看

zmts/supra-api-nodejs has 345 GitHub stars and 93 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-15 00:05 UTC. Last push 2023-03-04.

这些数字如何统计

可以做什么

  • Modular RESTful API
  • SQL based (PostgreSQL with objection.js)
  • Migrations(knex.js)
  • Auth (JWT/Access-token/Refresh-token)

实测星标增长

24小时
0
7天
正在收集历史
15天
正在收集历史
1个月
正在收集历史

各周期内的星标净变化,周期相互重叠,并非每日新增。缺失的测量保持空白。星标代表关注度,不代表软件质量。

关于

❤️ Node.js REST API boilerplate. Old but still good for references

数据

README.md

原文

Node.js API boilerplate

Piece of my thoughts about Node.js architecture.

supra-api-nodejs: A little bit about Node.js RESTful APIs Architecture (RU)

Highlights:

  • Modular RESTful API
  • ES6 Classes
  • Action based
  • SQL based (PostgreSQL with objection.js)
  • Migrations(knex.js)
  • Auth (JWT/Access-token/Refresh-token)
  • Cookie support
  • Role based access control
  • Request validation
  • CRUD(users, posts resources)
  • Automated API documentation
  • Full authentication/authorization and user registration flow implemented
  • Tests(e2e)

Key points:

0. Monolith first

Supra-api-nodejs its about monolith first approach. But this does not prevent you from using it in a microservice architecture as well.

1. Controller layer

Each entity have own controller class it slim layer representing resource mapping(routing)

class PostsController extends BaseController {
  static get router () {
    router.get('/', this.actionRunner(actions.ListAction))
    router.get('/:id', this.actionRunner(actions.GetByIdAction))
    router.post('/', this.actionRunner(actions.CreateAction))
    router.patch('/:id', this.actionRunner(actions.UpdateAction))
    router.delete('/:id', this.actionRunner(actions.RemoveAction))

    return router
  }
}

For example PostsController implements post entity routes. Each route fires own action.

2. Action layer

It's a class encapsulated request validation, permission verification and business logic. One file, one class, one REST operation, one use case.

3. DAO layer

Implement data access methods.

4. Model layer

Represent models schemas and validation rules. There is no other logic only model fields and validation rules.

Development:

Install global dependencies:

npm i -g knex nodemon

Setup database:

  1. Install PostgreSQL (https://postgresapp.com/downloads.html (for Mac OS))
  2. Create some DB (https://eggerapps.at/postico/ (for Mac OS))

Go ahead...

cd /supra-api-nodejs
  • cp .env.example .env
  • Set required credential in .env

Run migration to set base SQL schema

knex migrate:latest

Run server

npm run start // prod mode
npm run dev // dev mode

Implemented endpoints:

/auth

Path Method Description
/auth/login POST LoginAction
/auth/logout POST LogoutAction
/auth/refresh-tokens POST RefreshTokensAction

/users

Path Method Description
/users GET ListUsersAction
/users/current GET GetCurrentUserAction
/users/:id GET GetUserByIdAction
/users POST CreateUserAction
/users PATCH UpdateUserAction
/users/:id DELETE RemoveUserAction
/users/change-password POST ChangePasswordAction
/users/send-reset-password-email POST SendResetPasswordEmailAction
/users/reset-password POST ResetPasswordAction
/users/confirm-registration POST ConfirmRegistrationAction
/users/change-email POST ChangeEmailAction
/users/confirm-email POST ConfirmEmailAction
/users/resend-confirm-new-email-token POST ResendConfirmNewEmailTokenAction
/users/cancel-email-changing POST CancelEmailChangingAction

/posts

Path Method Description
/posts GET ListPostsAction
/posts POST CreatePostAction
/posts/:id GET GetPostByIdAction
/posts/:id PATCH UpdatePostAction
/posts/:id DELETE RemovePostAction

!!! Project still in progress !!!

2017 - 2018 - 2019 - 2020 ...