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.
npm i easy-express-router
- This is for typescript only. So we need typescript
- reflect-metadata must be turned on (
tsconfig.json
)
{
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
- 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'
});
}
}
- Set Controllers
import { EasyRouter } from 'easy-express-router';
// controllers
const todosController: Todos = new Todos();
EasyRouter.setControllers([todosController]);
- Init to app.use
import { EasyRouter } from 'easy-express-router';
app.use(EasyRouter.initControllers({ bodyParser: true })); // options is optional
- Get()
- Post()
- Put()
- Patch()
- Delete()
- Head()
- Options()
- 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 [];
}
}
- HttpStatus
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.