DEV Community

Cover image for Stop Building Express Apps Manually: Introducing exp-mvc
Zaheer Ahmed
Zaheer Ahmed

Posted on

Stop Building Express Apps Manually: Introducing exp-mvc

πŸŽ‰ Announcing exp-mvc v1.2.0 - Express MVC Architecture Builder!

A CLI tool to generate and scaffold Express.js applications with MVC architecture.

✨ Features:

  • One-command project generation
  • Automatic component scaffolding
  • Auto dependency and package installation
  • Ready-to-use basic ejs view templates
  • Built-in Mongodb support

Get it now:

npm install exp-mvc
Enter fullscreen mode Exit fullscreen mode

GitHub: https://github.com/ZaheerAhmedkhan65/exp-mvc
npm: https://www.npmjs.com/package/exp-mvc

After installing exp-mvc globally , run the following command:

expmvc new myapp
Enter fullscreen mode Exit fullscreen mode

Or

npx exp-mvc new myapp
Enter fullscreen mode Exit fullscreen mode

This will create:

./myapp
Enter fullscreen mode Exit fullscreen mode

with the full project structure.

Navigate to the project folder:

cd myapp
Enter fullscreen mode Exit fullscreen mode

Inside your project folder, install dependencies:

npm install
Enter fullscreen mode Exit fullscreen mode

configure the mongodb connection in the .env file

MONGODB_URI=mongodb://localhost:27017/myapp
Enter fullscreen mode Exit fullscreen mode

Run the server:

npm start
Enter fullscreen mode Exit fullscreen mode

or

npm run dev
Enter fullscreen mode Exit fullscreen mode

Run the watch command to automatically install dependencies on file save:

npm run watch
Enter fullscreen mode Exit fullscreen mode

Open the browser at http://localhost:3000

πŸ”₯ CLI Commands Reference

Once inside your generated project, use the expmvc command to generate components:

Generate Complete CRUD Scaffold

Create a full CRUD module with controller, model, service, route, and validation files:

expmvc generate scaffold User name:string email:string password:string age:number
Enter fullscreen mode Exit fullscreen mode

Generate Individual Components

Generate a controller

expmvc generate controller Product
Enter fullscreen mode Exit fullscreen mode

Generate a model with fields

expmvc generate model Category name:string description:string
Enter fullscreen mode Exit fullscreen mode

Generate a route

expmvc generate route Order
Enter fullscreen mode Exit fullscreen mode

Generate a service

expmvc generate service Auth
Enter fullscreen mode Exit fullscreen mode

Generate a validation file

expmvc generate validation User
Enter fullscreen mode Exit fullscreen mode

Generate a view (EJS template)

expmvc generate view home/index
Enter fullscreen mode Exit fullscreen mode

Relations Between Models

1. Generate Individual Models with References:

# Generate User model
expmvc generate model User name:string email:string password:string

# Generate Post model with User reference
expmvc generate model Post title:string content:string user:ref:User

# Generate Comment model with User and Post references
expmvc generate model Comment content:string user:ref:User post:ref:Post
Enter fullscreen mode Exit fullscreen mode

2. Create Relationships Between Existing Models:

# Add belongsTo relationship from Post to User
expmvc rel belongsTo Post User --field author

# Add hasMany relationship from User to Post
expmvc rel hasMany User Post --field posts

# Add belongsToMany relationship (for tags, categories, etc.)
expmvc rel belongsToMany Post Tag --field tags[]
Enter fullscreen mode Exit fullscreen mode

3. Complete Relationship Scaffold:

# Scaffold User-Post relationship (One-to-Many)
expmvc sr User Post hasMany

# Scaffold Post-Comment relationship (One-to-Many)
expmvc sr Post Comment hasMany

# Scaffold User-Comment relationship (One-to-Many)
expmvc sr User Comment hasMany
Enter fullscreen mode Exit fullscreen mode

4. Generate Complete CRUD with Relationships:

# Generate User scaffold
expmvc generate scaffold User name:string email:string password:string

# Generate Post scaffold with User reference
expmvc generate scaffold Post title:string content:string user:ref:User

# Then add the reverse relationship
expmvc rel hasMany User Post --field posts
Enter fullscreen mode Exit fullscreen mode

Field Types Supported

# Available field types:
name:string           # String field
age:number            # Number field
isActive:boolean      # Boolean field
createdAt:date        # Date field
tags:array           , Array field
userId:objectid       # ObjectId reference
Enter fullscreen mode Exit fullscreen mode

✨ Why Use This Generator?

  • Saves Hours: Skip repetitive setup and focus on business logic

  • Consistent Architecture: Enforces clean, maintainable structure

  • Production Ready: Includes validation, services, and middleware patterns

  • Scalable: Perfect for growing applications

  • Developer Friendly: Intuitive CLI with helpful commands

Perfect For:

  • Students learning Express.js

  • Backend developers starting new projects

  • Startups needing rapid prototyping

  • API bootstrapping and hackathons

  • Enterprise applications requiring structure

Top comments (0)