/easy-express-router

Express Router for Typescript - Easy and simple

Primary LanguageTypeScript

Easy Express Router for Typescript

Allows us to write express routers in typescript way (class-based, typesafe and asynchronous). It's a pluggable library so it's totally compatible with legacy codes, not enforcing application to use its styles.

Installation

npm i easy-express-router

tsconfig

{
  "experimentalDecorators": true,
  "emitDecoratorMetadata": true
}

Getting started

Usage

  1. Pretty straight forward, first having routing/Controller class:
import { Controller } from 'easy-express-router';

@Controller('todos')
class Todos {
  constructor() {}

  @Get('/')
  async find(req: Request, res: Response): Promise<Todo[]> {
    return [];
  }

  @Get('/:id')
  async findOne(req: Request, res: Response): Promise<void> {
    res.json({
      todoId: Number(req.params.id),
      titie: 'lerning js'
    });
  }
}
  1. Set Controllers
import { EasyRouter } from 'easy-express-router';

// controllers
const todosController: Todos = new Todos();

EasyRouter.setControllers([todosController]);
  1. Init to app.use
import { EasyRouter } from 'easy-express-router';

app.use(EasyRouter.initControllers({ bodyParser: true })); // options is optional

- and Done! 🧹✅

Examples:

Route Decorators

  • Get()
  • Post()
  • Put()
  • Patch()
  • Delete()
  • Head()
  • Options()

Response Decorators

Headers()

  • To specify a custom response header, you can either use @Headers() decorator or a library-specific response object ( and call res.header() directly).
import { Controller, EasyRouter } from 'easy-express-router';

@Controller('todos')
class Todos {
  constructor() {}

  @Get('/')
  @Headers({ key: 'Cache-Control', value: 'none' }) //or [{key,value}]
  async find(req: Request, res: Response): Promise<Todo[]> {
    return [];
  }
}

Enums

  • HttpStatus

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.