2.3.0 • Published 8 months ago

@mohammad-abbass/rapid-express v2.3.0

Weekly downloads
-
License
MIT
Repository
-
Last release
8 months ago

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

2.3.0

8 months ago

2.2.0

8 months ago

2.0.2

8 months ago

2.1.0

8 months ago

2.0.1

8 months ago

2.0.0

9 months ago

1.7.0

2 years ago

1.6.0

2 years ago

1.5.0

2 years ago

1.4.0

2 years ago

1.3.0

2 years ago

1.2.0

2 years ago

1.1.0

2 years ago

1.0.0

2 years ago