dynamic-route-generator
v1.5.1
Published
Generate REST endpoints for your application dynamically
Downloads
22
Maintainers
Readme
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