@tsiresy/api-serverdeprecated

API SERVER is an ts module that have for goal to create MVC pattern with express or fastify and auto configure swagger interface to manipulate the api

Usage no npm install needed!

<script type="module">
  import tsiresyApiServer from 'https://cdn.skypack.dev/@tsiresy/api-server';
</script>

README

API SERVER

API SERVER is an ts module that have for goal to create MVC pattern with express or fastify and auto configure swagger interface to manipulate the api

Installing

npm install --save @tsiresy/api-server 

After that you create config file inside config/app.ts

    import { ServerOption } from "@tsiresy/api-server";
    import path from "path";
    export const serverOption: ServerOption = {
        controllers: [path.join(__dirname, '..', '/controllers/**/*Controller.ts')],
        middlewares: [path.join(__dirname, '..', '/middlewares/**/*Middleware.ts')],
        models: [path.join(__dirname, '..', '/models/**/*Model.ts')]
    }

After that you can create server via express or fastify

Fastify server

import "reflect-metadata";
import { FastifyApplication, AppFactory, App } from '@tsiresy/api-server';
import {serverOption} from './config/app.ts'
// Fasify instance
async function bootstrap() {
    const app: App = await AppFactory.create<FastifyApplication>(FastifyApplication, serverOption);
    await app.serve(3000, 'localhost', 50, (_e, host) => {
        console.log(`Instance of fastify server running on  ${host}`)
    });
}
// boot app
bootstrap()
  

Express server

import "reflect-metadata";
import { ExpressApplication, AppFactory, App } from '@tsiresy/api-server';
import {serverOption} from './config/app.ts'

// Express inntance
async function bootstrap() {
    const app: App = await AppFactory.create<ExpressApplication>(ExpressApplication, serverOption); /// .create<FastifyApplication>(AppServer)
    await app.serve(3000, (port) => {
        console.log(`Instance of express server running on port ${port}`)
    });
}
// boot app
bootstrap()
 

Controller

There is an exemple of controller with opeapi

import { All, Get, Middleware, OpenApi } from "@tsiresy/api-server"
import { AppRequest, CookieType, AppResponse } from "@tsiresy/api-server"
import { Params, Req, Res, Query, Headers, Ip, Session, Cookies } from "@tsiresy/api-server";
import { Controller } from "@tsiresy/api-server";



@Controller({ prefix: '/api' })
export default class ExempleController {

    @OpenApi({
        responses: {
            '200': {
                '$ref': '',
                'description': 'Response',
            }
        },
        parameters: [
            {
                name: 'authorization',
                in: 'header'
            }
        ]
    })
    @Get('/login/:id')
    public async login(@Params('id') id: number,@Headers('authorization') authorization) {
        return {
            name: 'login', 
            params: id,
            authorization: authorization
        }
    }

    @OpenApi({
        responses: {
            '200': {
                '$ref': '',
                'description': 'Response',
            }
        }
    })
    @Middleware(InjectMiddleWare) // can inject middleware for only some method
    @All('/register')
    public async register(@Req() req: AppRequest, @Res() res: AppResponse, @Query() query: any, @Headers() headers: any, @Ip() ip: string, @Session() session: any, @Cookies() cookies: CookieType) {
        cookies.set('name', 'cookies test') // setting cookie 
        cookies.set('key', 'cookies test') // setting cookie 
        return {
            name: 'register',
            query: query,
            headers: headers,
            ip: ip,
            session: session,
            cookies: cookies
        }
    }
}

Middleware

Middleware is based on express middleware but it can work perfectly with fastify

import { NextFunction,Request,Response } from 'express';
import { AppMiddleWare } from '@tsiresy/api-server';

export default class ExempleMiddleWare implements AppMiddleWare {

    public use(req: Request, res: Response, next: NextFunction){
        console.log('Called middleware')
        next();
    }
}

For database create .env file and specify some parameters

NODE_ENV=development
DRIVER=mysql/postgres/sqlite/mongo
DATABASE=database
USER=root
PASSWORD=password

Tsiresy MilĂ 

tsiresymila@gmail.com