@typeix/resty
v8.8.0
Published
Fast, unopinionated, minimalist framework for building efficient and scalable applications
Downloads
260
Readme
@typeix/resty Typescript framework for Node.js
- Typeix Official && Documentation
@typeix/resty
is typescript lightweight framework for node js- Works with node version >= 12.9.x > latest
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();