tsnet-http
v1.0.7
Published
A set of TypeScript decorators for express.js inspired by the sample API project generated by .NET Core using C#.
Downloads
41
Maintainers
Readme
Table of Contents
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
- 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");
}
}
- 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();
}
}
- 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 theBaseController
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 theBaseMiddleware
class.@MiddlewareFunction(route?: string)
- Define a Middleware function.