@typeix/resty
TypeScript icon, indicating that this package has built-in type declarations

8.6.0 • Public • Published

Typeix Logo

A progressive Node.js framework for building scalable applications.

@typeix/resty Typescript framework for Node.js

Build Status Coverage Status npm

Resty

Fast, unopinionated, minimalist REST framework for building efficient and scalable applications. It uses modern TypeScript and combines elements of OOP, Functional Programming and Reactive Programming.

Resty has unique features:

  • Dependency Injection
  • Method Interceptors
  • Modular Application Design
  • Request Interceptors
  • Routing (Dynamic & Static)
  • AWS Lambda Adapter
  • Supports MVC Structure

Fast start with application starter kit.

Documentation will be updated and each decorator and interface will be explained in separate section.

Usage

In example below you can find basic application server starter:

import {
  pipeServer, Controller, Inject, ResolvedRoute,
  GET, POST, OnError, RootModule, Logger, Router,
  addRequestInterceptor, BodyAsBufferInterceptor
} from "@typeix/resty";
import {IncomingMessage, ServerResponse, createServer} from "http";
// resty supports http, https, http2

@Controller({
  path: "/",
  interceptors: [], // controller request interceptors executed in order
  providers: []  // providers created on each request
})
class HomeController {

  @Inject()
  private request: IncomingMessage;

  @Inject()
  private response: ServerResponse;

  @ResolvedRoute()
  private route: IResolvedRoute;

  @GET()
  actionGet() {
    return this.route.method.toUpperCase() + " ACTION";
  }

  @POST()
  @addRequestInterceptor(BodyAsBufferInterceptor)
  actionAjax(body: Buffer) {
    return JSON.stringify(body.toString());
  }

  // will match all routes on this controller
  @OnError("*")
  errorCase() {
    return "FIRE ERROR CASE";
  }

  @GET("redirect")
  actionRedirect() {
    this.response.setHeader("Location", "/mypage");
    this.response.writeHead(307);
    this.response.end();
  }
}

// DEFINE MODULE 
@RootModule({
  imports: [], // import other modules, created at application bootstrap
  shared_providers: [
    {
      provide: Logger,
      useFactory: () => new Logger({ options: {level: "debug"}})
    },
    Router
  ],
  providers: [], // providers created at application bootstrap
  controllers: [HomeController] // define controllers
})
class ApplicationModule {}

// START SERVER
async function bootstrap() {
  const server = createServer();
  const injector = await pipeServer(server, Application);
  server.on("error", e => console.error(e));
  server.listen(3000);
  return injector;
}

export default bootstrap();

Package Sidebar

Install

npm i @typeix/resty

Homepage

typeix.com

Weekly Downloads

2

Version

8.6.0

License

MIT

Unpacked Size

77.8 kB

Total Files

39

Last publish

Collaborators

  • igorzg