express-decorators-di Package is a lightweight, annotation-based framework for building RESTful APIs using Express and TypeScript. It leverages decorators to simplify the definition and organization of controllers, routes, middlewares, and dependency injection.
- Annotation-based Controllers and Routes: Use decorators to define controllers and routes.
- Middleware Support: Easily apply middlewares to routes.
- Dependency Injection: Built-in dependency injection for managing services.
- Modular Architecture: Organize your application into modules for better structure and maintainability.
- Async Handler: Simplify async route handling.
npm install express-decorators-di
Use the @Controller decorator to define a controller and the @Get, @Post, @Put, and @Delete decorators to define routes.
import { Controller, Get, Post, Body, Req, Res, Next } from 'my-npm-package'; import { Request, Response, NextFunction } from 'express';
@Controller('/users') export class UserController { @Get('/') getAllUsers(req: Request, res: Response) { // Your logic here res.send('Get all users'); }
@Post('/')
createUser(@Body() body: any, @Res() res: Response) {
// Your logic here
res.send(Create user with data: ${JSON.stringify(body)}
);
}
}
import { Controller, Get, UseMiddlewares } from 'my-npm-package'; import { Request, Response, NextFunction } from 'express';
function logMiddleware(req: Request, res: Response, next: NextFunction) { console.log('Request URL:', req.url); next(); }
@Controller('/logs') export class LogController { @Get('/') @UseMiddlewares(logMiddleware) getLogs(req: Request, res: Response) { res.send('Check console for logs'); } }
import { Injectable } from 'my-npm-package';
@Injectable() export class UserService { getUsers() { return ['User1', 'User2']; } }
import { Controller, Get } from 'my-npm-package'; import { UserService } from './user.service';
@Controller('/users') export class UserController { constructor(private userService: UserService) {}
@Get('/') getAllUsers(req: Request, res: Response) { const users = this.userService.getUsers(); res.send(users); } }
import { Module } from 'my-npm-package'; import { UserController } from './user.controller'; import { UserService } from './user.service';
@Module({ controllers: [UserController], providers: [UserService], }) export class UserModule {}
import { createApp } from 'my-npm-package'; import { UserModule } from './user.module';
const app = createApp(UserModule);
app.listen(3000, () => { console.log('Server is running on port 3000'); });