an opinionated, production-ready, isomorphic express/knex/objection starter with centralized configuration
🏠 Homepage
While node.js makes it easy to hack together an express server quickly, it's hard to actually build a production-ready, secure, scalable solution. Furthermore, when building a web app that has a backend and a frontend component, you end up having to repeat almost all of the logic.
Thus, based on my experience building production-level systems, I built a comprehensive express.js template with:
- a centralized hierarchical configuration system that can be easily overwritten
- sensible defaults that can suit any production environment - PaaS, containers, behind proxy/CDN, etc, with support for production logging and distributed tracing
- a proper ORM and query builder (Objection.js + knex) to allow working with relational databases in an ergonomic way without resulting in N+1
- extensible relational models with tons of features (e.g. validation and pagination) baked-in
- secure authentication system with Active Session management features
- fine-grained role-based authorization to control access down to the field level, that seamlessly integrates with the query builder
- a fast, distributed, fault-tolerant, class-based, and (optionally) rate-limited queuing system that takes advantage of multi-core CPUs
- fully-loaded development environment with automated testing/migration/dependencies/linting via git & npm hooks, development-purpose mail server, and even automatic type generation!
- a scalable process model (both for the server and the worker) that is easy to maintain once in production
- easy & mobile-optimized email templating w/ a custom MJML -> hbs -> node solution
When you create a GitHub repo, you can either select express-objection-starter
as the starting template, or you can start by cloning this repo:
git clone https://github.com/JaneJeon/express-objection-starter.git
rm -rf .git
yarn test
👤 Jane Jeon
- Github: @JaneJeon
Contributions, issues and feature requests are welcome!
Feel free to check issues page.
Give a ⭐️ if this project helped you!