decorated-router
TypeScript icon, indicating that this package has built-in type declarations

1.4.4 • Public • Published

Router with Typescript decorators

This is an easy way to use Express and define controllers with no route files and run your application with dependency injection. Let's take a look.

Installation

npm install decorated-router

Basic usage

Loader (index) file

import { App, METHOD, HEADER } from 'decorated-router';

@App({
    controllers: [
        Controller
    ],
    server: {
        port: 3000,
        methods: [METHOD.GET, METHOD.POST, METHOD.PUT, METHOD.DELETE, METHOD.PATCH, METHOD.OPTIONS],
        headers: [HEADER.ORIGIN, HEADER.XREQUESTEDWITH, HEADER.CONTENTTYPE, HEADER.ACCEPT, HEADER.AUTHORIZATION]
    }
})
class loader {}

Controllers

import { Controller, Get, Delete, Post, Put, Path, Query, Body } from 'decorated-router';
import { Response } from 'express';

@Controller({
    url: '/controller',
    cors: "*",
    auth: AuthenticationMiddleware
})
export class Controller {

    constructor(
        private _someInjectedService: SomeInjectedService
    ) { }

    @Get('/to/:to')
    getTo(@Path('to') to) {
        return new Promise((resolve, reject) => {
            resolve({ to });
        })
    }

    @Delete('/from') // ?from=someValue
    delete(@Query('from') from, res: Response) {
        setTimeout(() => {
            res.json({ from });
        }, 1000);
    }

    @Post('/when')
    post(@Body() someDto: SomeDTO) {
        return { start: someDto.getStart() };
    }

    @Put('/where')
    put(@Body() someDto: SomeDTO) {
        return this._someInjectedService.doThings(someDto.getEnd());
    }
}

Data Objects

import { DataObject } from 'decorated-router';

@DataObject()
export class SomeDTO {
    private start: number;
    private end: number;

    public getStart(): number {
        return this.start;
    }

    public getEnd(): number {
        return this.end;
    }
}

Dependency Injection

import { Injectable } from 'decorated-router';

@Injectable()
export class SomeInjectedService {

    private name: string

    constructor(
        private _someOtherInjectedService: SomeOtherInjectedService
    ) { }

    doThings(end: number): Promise<any> {
        return new Promise((resolve, reject) => {
            if (this._someOtherInjectedService.someMagic) {
                resolve(end);
            } else {
                reject('error');
            }
        });
    }
}

Readme

Keywords

none

Package Sidebar

Install

npm i decorated-router

Weekly Downloads

1

Version

1.4.4

License

ISC

Unpacked Size

15 kB

Total Files

14

Last publish

Collaborators

  • devmarcos