tsnet-http

A set of TypeScript decorators for express.js inspired by the sample API project generated by .NET Core using C#.

Usage no npm install needed!

<script type="module">
  import tsnetHttp from 'https://cdn.skypack.dev/tsnet-http';
</script>

README

ts.NET-HTTP

A set of TypeScript decorators for express.js inspired by the sample API project generated by .NET Core using C#.

GitHub Workflow StatusnpmGitHub top language

Table of Contents

  1. Why?
  2. How to use
  3. Decorators
  4. Technologies
  5. License

Why?

Working with C# and .NET 5/6 I really liked how the API Project is structured and wanted to achieve a similar experience using TypeScripts decorators to create a micro framework.

This micro frameworks allows for creating quick controllers and routes which are then automatically registered to the express server.

How to use

Caution

  1. First define a controller in a file like ./controllers/ping.controller.ts:
import { BaseController, Controller, Get } from "ts-http";
import { Request, Response } from "express";

@Controller("/")
export abstract class PingController extends BaseController {
    
    @Get("/ping")
    public static Get(req: Request, res: Response) {
        res.send("pong");
    }
}
  1. Now define a middleware in a file like ./middlewares/test.middleware.ts:
import { BaseMiddleware, Middleware, MiddlewareFunction } from "ts-http";
import { Request, Response, NextFunction } from "express";

@Middleware
export abstract class UseTest extends BaseMiddleware {

    @MiddlewareFunction("/ping") /* leave empty for global middleware */
    public static Use(req: Request, res: Response, next: NextFunction) {
        res.setHeader("ping", "pong");
        next();
    }
}
  1. Let's register our new controller and start the server in a ./index.ts:
import { Server } from "ts-http";

Server.Init({
    controllerDirs: [ "/controllers" ],
    middlewareDirs: [ "/middlewares" ],
    callback: (port: number) => { console.log("Server running on port "+port); },
    port: 3000,
    verbose: true // set to false to disable debug logs
});

Hint: the port and callback are optional arguments, if no port is provided the server tries to read the process from the environmental variables, should this fail the port 3000 is used and the default callback logs the used port to the console.

Decorators

  • @Controller(route: string) Defining a controller allowing using the route decorators to automatically register routes. Note: the controller has to be a class inheriting the BaseController class.

  • @Get(route?: string) - GET method (parameter optional, defaults to method name).

  • @Post(route?: string) - POST method (parameter optional, defaults to method name).

  • @Put(route?: string) - PUT method (parameter optional, defaults to method name).

  • @Delete(route?: string) - DELETE method (parameter optional, defaults to method name).

  • @Middleware Defining a middleware allowing using the middlewareFunction decorators to automatically register middlewares. Note: the Middleware has to be a class inheriting the BaseMiddleware class.

  • @MiddlewareFunction(route?: string) - Define a Middleware function.

Technologies

License

MIT