Express Js Review
I wanted a comprehensive JavaScript framework — something like Rails, Django, or Laravel but for Node. So I started with the most popular option: Express.
14 Oct 2023

I wanted a comprehensive JavaScript framework — something like Rails, Django, or Laravel but for Node. So I started with the most popular option: Express.
Here's the thing. Express isn't a framework. It's a routing library.
It handles HTTP requests and responses. That's it. Need an ORM? Install one. Need authentication? Install one. Need input validation? Install one. Express gives you zero opinions on how to structure your application.
Compare that to Django, which ships with an ORM, admin panel, auth system, and templating engine out of the box. Or Rails, which has conventions for everything from file structure to database migrations.
What Express is good at
Routing. Middleware composition. Getting an HTTP server running in five lines of code. If you know exactly which libraries you want and how to wire them together, Express gets out of your way.
What it's missing
Structure. Convention. Guardrails. On a team of five developers, you'll end up with five different ways to organize an Express app.
Where I landed
Express is fine for small APIs or prototypes where you want full control. For anything larger, I look for frameworks that provide more structure — NestJS, Fastify with a plugin ecosystem, or even Koa (built by the Express team as a more modern take on the same idea).
The Node ecosystem still doesn't have a "Rails for JavaScript." But it's getting closer.
AI Transformation for Organisational Leaders
For directors, heads of function and founders: eight live evening sessions with Ehsan Gazar and Anoosh Zeighami, ending with a one-page 2027 AI plan for your organisation, built on a real workflow and ready for your leadership team.
$1,495, or $1,045 with code EARLYBIRD until 23 Oct.
View the live cohortKeep reading
- TypeScript Anti-Patterns That Cost You Twice: Build Time, Runtime, and the Interview
- The Frontend Toolchain Is Now Written in Rust and Go. What That Means for You
- oxlint vs ESLint: Why I Replaced ESLint with oxlint
- SystemJS Is Dead. Native ESM Finally Won.
- Replace Axios with a Simple Custom Fetch Wrapper (Production-Ready Guide)
- Stop Shipping ChatGPT Wrappers. Ship an Agent in TypeScript, or Don't Bother.