Folder Structure
Each NodeBuilder template follows a clean, predictable structure designed for scalability and clarity.
This layout makes it easy to add routes, controllers, services, and utilities without clutter.
Typical Project Layout
<project-root>/
├── package.json
├── server.js
└── src/
├── app.js
├── config/
├── controllers/
├── models/
├── routes/
├── services/
├── middleware/
└── utils/Root Files
| File | Purpose |
|---|---|
| package.json | Declares dependencies, scripts, and project metadata. |
| server.js | Entry point — loads Express app, connects DB, and starts the server. |
| .env / .env.example | Environment variables for local and production configs. |
[!TIP] You can rename
server.jstoindex.jsormain.jsif you prefer, as long as package.json scripts are updated accordingly.
/src Directory
This is where all your backend logic lives.
src/app.js
The core Express configuration file.
Includes middleware setup, route registration, and error handling.
Markers like // ROUTE_IMPORTS_START are used internally for optional CRUD removal.
src/config/
Houses configuration modules:
db.js→ MongoDB or database connectionlogger.js→ Winston or console loggersocket.js→ Socket.IO initialization (in real-time templates)
Add your own config files here (e.g., Redis, mail, or caching).
src/controllers/
Contains request handler logic.
Each controller matches a route and interacts with models/services.
Example: user.controller.js, todo.controller.js.
src/models/
Defines Mongoose schemas or database models. Example:
const UserSchema = new mongoose.Schema({ name: String, email: String })src/routes/
Express routers that map endpoints to controllers. Example:
router.get('/users', getUsers)
router.post('/users', createUser)[!TIP] Keep route definitions simple — offload logic to controllers or services.
src/services/
Reusable business logic and helpers — usually database or API interaction code.
Example: user.service.js handles queries, validation, or aggregation logic.
src/middleware/
Middleware used globally or per-route:
auth.middleware.js— JWT or session validationerror.middleware.js— global error handlervalidate.middleware.js— schema validation (e.g., Joi)
src/utils/
Utility functions and helper classes. Includes things like:
ApiResponse.js,ApiError.jsCatchAsync.js,Token.js- Response or formatting helpers
Template Variations
| Template | Notable Extras |
|---|---|
| Basic | Minimal setup with optional Todo CRUD. |
| REST API | Includes services, auth, and schema validation layers. |
| Socket.IO | Adds src/config/socket.js and real-time event wiring. |
Extending the Structure
You can safely add new folders:
src/
┣ jobs/ # Background or scheduled tasks
┣ scripts/ # CLI scripts (e.g. database seeding)
┗ validators/ # Custom schema validators[!NOTE] NodeBuilder doesn’t enforce structure beyond the basics — you can freely add or rename modules to fit your workflow.
Example Flow
Typical request flow in a REST API template:
Route → Controller → Service → Model → ResponseEach layer handles one responsibility:
- Routes define endpoints
- Controllers manage request logic
- Services handle database or external API logic
- Models define data structure
- Utils handle formatting and response output
✅ Summary
| Folder | Purpose |
|---|---|
| config/ | Environment, database, logger, socket setup |
| controllers/ | Request handlers |
| models/ | Database schemas |
| routes/ | API endpoints |
| services/ | Business logic |
| middleware/ | Request interceptors |
| utils/ | Shared helpers and error classes |
[!TIP] The folder structure is consistent across all templates — once you learn one, you know them all. Customize and extend as needed for your project’s complexity!