Socket
Socket
Sign inDemoInstall

@restyjs/core

Package Overview
Dependencies
7
Maintainers
1
Versions
20
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    @restyjs/core

A Node.js framework


Version published
Weekly downloads
24
increased by500%
Maintainers
1
Install size
2.90 MB
Created
Weekly downloads
 

Readme

Source

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, satish.babariya@gmail.com

License

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

Keywords

FAQs

Last updated on 18 Nov 2020

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc