All Projects → restyjs → resty

restyjs / resty

Licence: MIT license
A Node.js framework

Programming Languages

typescript
32286 projects

Projects that are alternatives of or similar to resty

common-injector
Heavily influenced by Angular and it's dependency injection. Inspired by Angular and Indiv.
Stars: ✭ 18 (-10%)
Mutual labels:  dependency-injection, decorators
Bottlejs
A powerful dependency injection micro container for JavaScript applications
Stars: ✭ 1,171 (+5755%)
Mutual labels:  dependency-injection, decorators
nodejs-boilerplate
Clean Architecture for node.js projects (Typescript + Express + TypeORM + Typedi)
Stars: ✭ 199 (+895%)
Mutual labels:  dependency-injection, typedi
vue3-oop
使用类和依赖注入写vue组件
Stars: ✭ 90 (+350%)
Mutual labels:  dependency-injection, decorators
Ioc
🦄 lightweight (<1kb) inversion of control javascript library for dependency injection written in typescript
Stars: ✭ 171 (+755%)
Mutual labels:  dependency-injection, decorators
Typescript Ioc
A Lightweight annotation-based dependency injection container for typescript.
Stars: ✭ 427 (+2035%)
Mutual labels:  dependency-injection, decorators
Injection Js
Dependency injection library for JavaScript and TypeScript in 5.1K. It is an extraction of the Angular's ReflectiveInjector which means that it's well designed, feature complete, fast, reliable and well tested.
Stars: ✭ 962 (+4710%)
Mutual labels:  dependency-injection, decorators
Fastify Decorators
Set of Typescript decorators to build Fastify server with controllers, services and hooks
Stars: ✭ 85 (+325%)
Mutual labels:  dependency-injection, decorators
React Ioc
Hierarchical Dependency Injection with new React 16 Context API
Stars: ✭ 133 (+565%)
Mutual labels:  dependency-injection, decorators
Tsed
📐 Ts.ED is a Node.js and TypeScript framework on top of Express to write your application with TypeScript (or ES6). It provides a lot of decorators and guideline to make your code more readable and less error-prone.
Stars: ✭ 1,941 (+9605%)
Mutual labels:  dependency-injection, decorators
Testdeck
Object oriented testing
Stars: ✭ 206 (+930%)
Mutual labels:  dependency-injection, decorators
Typedi
Simple yet powerful dependency injection tool for JavaScript and TypeScript.
Stars: ✭ 2,832 (+14060%)
Mutual labels:  dependency-injection, typedi
tsed
📐 Ts.ED is a Node.js and TypeScript framework on top of Express to write your application with TypeScript (or ES6). It provides a lot of decorators and guideline to make your code more readable and less error-prone.
Stars: ✭ 2,350 (+11650%)
Mutual labels:  dependency-injection, decorators
ByteCopy
Simple C99 program and API for copying files.
Stars: ✭ 16 (-20%)
Mutual labels:  simple
okito
Your best flutter coding friend. All in one; state management, navigation management(with dynamic routing), local storage, localization, dependency injection, cool extensions with best usages and with the support of best utilities!
Stars: ✭ 37 (+85%)
Mutual labels:  dependency-injection
instagram-profilecrawl
📝 quickly crawl the information (e.g. followers, tags etc...) of an instagram profile.
Stars: ✭ 964 (+4720%)
Mutual labels:  simple
vue-corator
this is vue decorator utils
Stars: ✭ 33 (+65%)
Mutual labels:  decorators
drape
Drape – Reincarnation of Draper for Rails 5
Stars: ✭ 57 (+185%)
Mutual labels:  decorators
deadlines
A simple, offline deadline tracker made with Vue.js and localForage.
Stars: ✭ 22 (+10%)
Mutual labels:  simple
simple-ransomware
Simple ransomware to troll your friends. Encrypt and Decrypt a Windows computer using a simple xor encryption which is pretty basic!
Stars: ✭ 29 (+45%)
Mutual labels:  simple

resty.js

TypeScript Express async/await

Fast, opinionated, minimalist and testable web framework built on top of express.js and typescript with decorators.

Table of Contents

Installation

Install from the command line:

npm install @restyjs/core

enable following settings in tsconfig.json:

"emitDecoratorMetadata": true,
"experimentalDecorators": true,

Get started

import resty, { Controller, Get, Context } from "@restyjs/core";

@Controller("/hello")
class HelloController {
  @Get("/")
  index() {
    return "Hello World";
  }
}

const app = resty({
  controllers: [HelloController],
});

app.listen(8080);

Application

Create new resty.js app

// returns express application instance
const app = resty({
  controllers: [],
});

resty always returns express application instance.

Add Route Prefix

const app = resty({
  routePrefix: "/api",
  controllers: [],
});

Use existing express.js app

inside resty you can pass your existing express app instance inside app parameter.

const express_app = express();

const app = resty({
  app: express_app,
  controllers: [],
});

Use existing express router

inside resty you can pass your existing express router inside router parameter.

const router = express.Router();

const app = resty({
  router: router,
  controllers: [],
});

Controllers

async/await

@Controller("/hello")
class HelloController {
  @Get("/register")
  async register(ctx: Context, @Body() input: UserDTO) {
    // create record
    const user = await createUser(input);

    // return user record
    return ctx.res.json({ user }).status(200);
  }
}

Get, Post, Put, Delete, Patch

Create a file HelloController.ts.

@Controller("/hello")
class HelloController {
  @Get("/")
  index() {
    return "Hello World";
  }

  @Get("/health")
  health(ctx: Context) {
    return ctx.res.json({ status: "ok" }).status(200);
  }
}
@Controller("/")
export class UserController {
  @Get("/users")
  getAll() {
    return "This action returns all users";
  }

  @Get("/users/:id")
  getOne(@Param("id") id: number) {
    return "This action returns user #" + id;
  }

  @Post("/users")
  post(@Body() user: any) {
    return "Saving user...";
  }

  @Put("/users/:id")
  put(@Param("id") id: number, @Body() user: any) {
    return "Updating a user...";
  }

  @Delete("/users/:id")
  remove(@Param("id") id: number) {
    return "Removing user...";
  }
}

Context, Request, Response, Next

  @Get("/health")
  health(ctx: Context) {
    return ctx.res.json({ status: "ok" }).status(200);
  }

Middlewares

Application Middlewares

Application lavel middlewares like helmet, cors or body-parser

import cors from "cors";
import helmet from "helmet";

const app = resty({
  routePrefix: "/api",
  controllers: [HelloController],
  middlewares: [cors(), helmet()],
});

Controller Middlewares

const isAdmin = async (req: any, res: any, next: any) => {
  if (!req.currentUser) {
    return next(new HTTPError("Error in checking current user", 500));
  }
  if (req.currentUser.role != Role.Admin) {
    return next(new HTTPError("Insufficient permission", 403));
  }
  return next();
};

@Controller("/admin", [isAdmin])
export class AdminController {
  @Get("/")
  async allUsers() {
    const users = await getAllUsers();
    return { users };
  }
}

Route Middlewares

const isAdmin = async (req: any, res: any, next: any) => {
  return next();
};

@Controller("/post")
export class AdminController {
  @Get("/", [isAdmin])
  async allUsers() {
    const users = await getAllUsers();
    return { users };
  }
}

Post Middlewares

const app = resty({
  routePrefix: "/api",
  controllers: [HelloController],
  postMiddlewares: [],
});

// User postMiddlewares or use same old app.use form express.
app.use((req, res, next) => {
  next();
});

Error Handling

resty provides inbuilt 404 and HTTP errors and UnauthorizedError Handling. if you want to implement your own error handling pass handleErrors: false to app config.

ORM / TypeORM

install typeorm module

npm install @restyjs/typeorm

Database Connection

resty will create database connection directly when provided Database(options: ConnectionOptions) inside providers: [].

import resty from "@restyjs/core";
import { Database } from "@restyjs/typeorm";

const app = resty({
  controllers: [],
  providers: [
    Database({
      type: "sqlite",
      database: "example.db",
      entities: [],
    }),
  ],
});

Typeorm Docs

For more info please refer to typeorm docs regarding database connections parameters and other orm features.

Author

Satish Babariya, [email protected]

License

resty.js is available under the MIT license. See the LICENSE file for more info.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].