/dynamic-route-generator

Dynamically generate REST endpoints for your application

Primary LanguageJavaScript

dynamic-route-generator

Dynamically generate REST endpoints for your application

How to use

If using Postgres as your database
import { Sequelize, STRING, ARRAY } from "sequelize";

const { RouteGenerator } = require('dynamic-route-generator');
const Sequelize = require('sequelize')
const { XAuth } = require('x-auth-plugin')

export class PostgresInstance {
  constructor(app) { }

  setup() {
    const sequelize: Sequelize = new Sequelize('testdb', 'admin', '1234', {
      host: 'localhost',
      dialect: 'postgres',
      pool: {
        max: 5,
        min: 0,
        acquire: 30000,
        idle: 10000
      },
      logging: false,
      operatorsAliases: false
    });

    const GameModel = sequelize.define('gameschema', {
      name: {
        type: STRING,
        allowNull: false
      },
      players: {
        type: ARRAY(STRING),
        allowNull: false
      }
    })

    sequelize.sync().then(() => {
      const routes = [{
        uri: '/list/games',
        model: GameModel,
        methods: [{
          name: 'get'
        }, {
          name: 'post'
        }, {
          name: 'put'
        }, {
          name: 'delete'
        }]
      }]

      new RouteGenerator({
        routes: routes,
        database: 'postgres',
        app: this.app,
        plugins: {
          pre: [],
          post: []
        }
      })

      this.app.listen(8080)
    })
  }
}
If using Mongo as your database
import { Schema, connect, model } from "mongoose";

const { RouteGenerator } = require('dynamic-route-generator');

export class MongoInstance {
  constructor(app) { }

  setup() {
    const GameSchema = new Schema({
      name: {
        required: true,
        type: String
      },
      playersOnline: {
        required: true,
        type: Number
      }
    })

    connect('mongodb://localhost/test').then(() => {
      const routes = [{
        uri: '/list/games',
        model: model('GameSchema', GameSchema),
        methods: [{
          name: 'get'
        }, {
          name: 'post'
        }, {
          name: 'put'
        }, {
          name: 'delete'
        }]
      }]

      new RouteGenerator({
        routes: routes,
        database: 'mongo',
        app: this.app,
        plugins: {
          pre: [],
          post: []
        }
      })

      this.app.listen(8080)
    })
  }
}
index.js
import express from 'express';
import { PostgresInstance } from './postgres-setup';
import { MongoInstance } from './mongo-setup';

const app = express()
const databaseToUse = process.argv[2].substr(2)

if (databaseToUse === 'postgres') {
  new PostgresInstance(app).setup();
} else {
  new MongoInstance(app).setup();
}

API

Route Generator API

Property Default Value Required Information
routes none True An array of routes you wish to generate
database mongo True The kind of database you wish to use, currently supports Mongo and Postgres
app none True The app instance you wish to assign routes to
baseUri / False The base uri where the api will start from
plugins none True Plugins that can be run inside of the Dynamic Route Generator
plugins = {
  pre: [PluginName],
  post: [PluginName2, PluginName3]
}

Routes API

Property Default Value Required Information
uri none True The uri for the route you are creating
model none True The data model that represents the object for this route
handlers [] False Global handlers you want to apply to all methods
methods ['get'] False If you do not specify any methods it will default to creating a GET route; Methods you want to be avaiable for this route along with any handlers. An example of a handler could be that of an authentication check
methods = [{
  name: 'get',
  handlers: []
}]

- OR -

methods = ['get']

Develop custom plugins

If you would like to create your own custom plugins, take a look at api-docs example

API Definition

Methods

install - A static method that simply executes an event named 'Plugin Installed' and internally, will execute the given code in the 'apply' method

apply - A method that executes your plugins code. The apply method gives you access to the routes object as the first argument