npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@mohammad-abbass/rapid-express

v2.3.0

Published

Rapidly generate Express.js applications with ease

Readme

Express Project Generator

This CLI tool generates a class-based Express.js project with built-in support for Prisma, TypeScript, and decorators for handling routes, middlewares, and validation. It simplifies backend development by removing boilerplate code and enforcing best practices.

Features

  • Class-Based Express.js Setup: Organizes controllers and services using class-based architecture.

  • Built-in Decorators:

    • @Get(), @Post(), @Put(), @Delete(). for defining routes.
    • @Middlewares() , pass it an array of the middlewares you want to apply to a route.
    • @ValidateBody() for request body validation using express-validator.
    • @Controller() for determining a common path to all the routes inside the controller
  • Prisma Integration: Preconfigured ORM setup for managing databases efficiently.

  • Automatic Error Handling:

    • No need to use try-catch in controllers and services.
    • All controllers are automatically wrapped with error handling.
  • Authentication Endpoints: Generates authentication routes (signup & signin) with JWT support.

  • TypeScript Support: Type safety and modern JavaScript features are included by default.

  • Register a controller to the app by adding it to the array passed to the initializeApp function in index.ts

Installation

You can install the CLI tool globally or use npx to generate a project without installation.

Install Globally

npm i @mohammad-abbass/rapid-express

Usage

To generate a new Express.js project, run:

npx create <app-name>

This will:

  1. Create a new directory my-express-app.
  2. Scaffold a class-based Express.js application.
  3. Set up Prisma, authentication, and decorators.

Project Structure

The generated project follows this structure:

<app-name>/
├── src/
│   ├── app/
│   │   ├── initializeApp.ts  # Initializes the Express app
│   │   ├── Base.Controller.ts  # Base class for all controllers
│   │   ├── registerControllers.ts
│   ├── decorators/  # Custom decorators for routing, middleware, and validation
│   ├── features/  # Contains modular feature-based folders (auth, users, etc.)
│   │   ├── auth/
│   │   │   ├── controllers/
│   │   │   ├── services/
│   │   │   ├── middlewares/
│   │   │   ├── validations/
│   │   ├── ...
│   ├── errorHandlers/  # Custom error classes
│   ├── db/
│   │   ├── config.ts  # Prisma setup
│   ├── utils/
│   ├── index.ts  # Entry point
├── prisma/
│   ├── schema.prisma  # Prisma schema
├── .env  # Environment variables
├── package.json
├── README.md


Example Usage

Controller with Decorators

@Controller('auth')
export class AuthController extends BaseController {
  @Post('signup')
  @Middlewares([AuthLimiter])
  @ValidateBody(signupValidations)
  async SignUp(req: Request, res: Response, next: NextFunction) {
    const user = req.body;

    await authService.signup(user);

    res.status(201).json({ message: 'User registered successfully' });
  }

  @Post('signin')
  @Middlewares([AuthLimiter])
  @ValidateBody(signinValidations)
  async SignIn(req: Request, res: Response, next: NextFunction) {
    const { email, password } = req.body;

    const { accessToken, refreshToken } = await authService.signin(
      email,
      password
    );

    res.status(200).json({
      message: 'User signed in successfully',
      data: {
        accessToken,
        refreshToken,
      },
    });
  }
}

No Need for Try-Catch in Controllers & Services

All controllers and services are automatically wrapped in a global error handler, removing the need for explicit try-catch blocks.

Custom Error Handling Example

export default class ConflictError extends AppError {
  constructor(message: string) {
    super(message);
    this.name = 'ConflictError';
  }
}

Setup After Generation

  1. Navigate to the project folder:
    cd my-express-app
  2. Install dependencies:
    npm install
  3. Start the development server:
    npm run dev

To Contribute

https://github.com/Mohammad-y-abbass/rapid-express

License

MIT License