@febbyjs/febby

microservice framework for building application services

Usage no npm install needed!

<script type="module">
  import febbyjsFebby from 'https://cdn.skypack.dev/@febbyjs/febby';
</script>

README

Table of Contents

Febby

Febby

Parameters

  • config Object Represents basic app setup. (optional, default {})

Examples

const config = {
  port: 3000,
  hostname: 'abc.xyz',
  db: {
         url: 'mongodb://localhost/test'
      },
  bodyParser: {},
  cors: {},
  helmet: {},
  version: 'v1'
};

const Febby = require('febby');
const febby = new Febby(config);
febby.bootstrap();

route

Register Route

Parameters

  • routeConfig Object the route object used to create route configuration.

Examples

const febby = new Febby(config);
 // create router
 const api = febby.router('/api');

 febby.route({
     router: api,
     method: 'get',
     path: '/',
     middlewares: [],
     handler: (req, res, next) => {
         // do business 
     }
 });

 febby.bootstrap(()=>{
     console.log('app started');
 })

routes

Register Route list

Parameters

  • routes Array list of route objects

Examples

const febby = new Febby(config);
 // create router
 const api = febby.router('/api');
 const routes = [
     {
         router: api,
         method: 'get',
         path: '/',
         middlewares: [],
         handler: (req, res, next) => {
             // do business 
         }
      },
     {
         router: api,
         method: 'get',
         path: '/echo',
         middlewares: [],
         handler: (req, res, next) => {
             res.json({echo:req.url});
         }
      }
     ];
febby.routes(routes);

 febby.bootstrap(()=>{
     console.log('app started');
 })

middleware

Register middleware.

Parameters

  • middleware Function Represents middleware function.
  • router Object Represents Express Router object by default it is app router object.

Examples

const febby = new Febby(config);
 // create router
 const api = febby.router('/api');
 const fn = (req,res,next)=>{
     // some logic or validation
     next();
 }
 const fn2 = (req,res,next)=>{
     // some validation logic
     next();
 }
 // middleware runs on api router
 febby.middleware(fn,api);

 // middleware runs on app router
 febby.middleware(fn);

middlewares

Register Middlewares.

Parameters

  • middlewares Array<Object> Represents list of middlewares.
  • router Object Represents Express Router Object, default to app router.

Examples

const febby = new Febby(config);
 // create router
 const api = febby.router('/api');
 const fn = (req,res,next)=>{
     // some logic or validation
     next();
 }
 const fn2 = (req,res,next)=>{
     // some validation logic
     next();
 }
 // middleware list runs on api router and router is optional
 febby.middlewares([fn,fn2],api);

router

Register a Router.

Parameters

  • url string Represents url.
  • router Object Represents Express Router object, default to app router object.
  • options Object Represents Express Router config options.

Examples

const febby = new Febby(config);
 // create router
 const api = febby.router('/api'); // path =  /api
 // users subroute mounted on /api
 const userApi = febby.router('/users',api); //  path = /api/users

 const fn = (req,res,next)=>{
     // some logic or validation
     next();
 }
 const fn2 = (req,res,next)=>{
     // some validation logic
     next();
 }
 // this middleware list runs on api router
 febby.middlewares([fn, fn2], userApi);

 // this middleware runs on app router
 febby.middleware(fn);

 febby.route({
     router: userApi,
     method: 'get',
     path: '/',
     middlewares: [],
     handler: (req, res, next) => {
         // do business 
     }
 });

 febby.bootstrap(()=>{
     console.log('app started');
 })

connection

Establish Connection between app and database.

Parameters

  • url string Represents database url.
  • options Object Represents mongoose connect optional object.

Examples

const config = {
  port: 3000,
  hostname: 'abc.xyz',
  bodyParser: {},
  cors: {},
  helmet: {},
  version: 'v1'
}
 const febby = new Febby(config);
 // create router
 const api = febby.router('/api');
 const fn = (req,res,next)=>{
     // some logic or validation
     next();
 }
 const fn2 = async (req,res,next)=>{
     const db = febby.model(); // Returns db models object
     const users = await db.user.find({});
     // some validation logic on users
     next();
 }
 // this middleware runs on api router
 febby.middleware(fn,api);

 // this middleware runs on app router
 febby.middleware(fn);

 // if db config specified then febby will try to connect to database automatically
 // to make database connection externally then use febby.connection

 const options = {
     useNewUrlParser: true,
     // other mongoose options
 }
 const url = 'mongodb://localhost:27017/test';
 febby.connection(url, options)

 febby.route({
     router: api,
     method: 'get',
     path: '/:id',
     middlewares: [],
     handler: async (req, res, next) => {
         const user = febby.Model('user'); // get registered model by name
         const info = await user.findById(req.params.id);
         res.status(200).send(info);
     }
 });

// start the app 
 febby.bootstrap(()=>{
     console.log('app started');
 })

crud

Creates CRUD on given route object with specific config.

Parameters

  • path string Represents url path.
  • config Object Represents CRUD configuration.
  • model Object Represents Model config object.
  • router Object Represents Express Router object. it is optional.

Examples

const febby = new Febby(config);
 // create router
 const api = febby.router('/api');
 const bookApi = febby.router('/books',api);
 const bookCrudConfig = {
   crud: true,
   middlewares:[]
 };
 const bookSchema = {
   name: { type: String },
   author:{ type: Number }
 };
 const bookModel = febby.model('books',bookSchema);
 // creates POST method on book api
 // if model already registered then use febby.model('books') to get model object
febby.crud('/', bookCrudConfig, bookModel, bookApi);

models

Returns models object.

Examples

const febby = new Febby(config);
 // create router
 const api = febby.router('/api');
 const fn = (req,res,next)=>{
     // some logic or validation
     next();
 }
 const fn2 = async (req,res,next)=>{
     const db = febby.model(); // Returns db models object
     const users = await db.user.find({});
     // some validation logic on users
     next();
 }
 // this middleware runs on api router
 febby.middleware(fn,api);

 // this middleware runs on app router
 febby.middleware(fn);

 febby.route({
     router: api,
     method: 'get',
     path: '/',
     middlewares: [],
     handler: (req, res, next) => {
         // do business 
     }
 });

 febby.bootstrap(()=>{
     console.log('app started');
 })

Returns Object Returns mongoose models object.

model

Rigister and Returns model object.

Parameters

  • name string Represents name of model.
  • schema Object Represents mongoose schema object.

Examples

const febby = new Febby(config);
 // create router
 const api = febby.router('/api');
 const fn = (req,res,next)=>{
     // some logic or validation
     next();
 }
 const fn2 = async (req,res,next)=>{
     const db = febby.model(); // Returns db models object
     const users = await db.user.find({});
     // some validation logic on users
     next();
 }
 // this middleware runs on api router
 febby.middleware(fn,api);

 // this middleware runs on app router
 febby.middleware(fn);

 febby.route({
     router: api,
     method: 'get',
     path: '/:id',
     middlewares: [],
     handler: async (req, res, next) => {
         const user = febby.Model('user'); // get registered model by name
         const info = await user.findById(req.params.id);
         res.status(200).send(info);
     }
 });

 febby.bootstrap(()=>{
     console.log('app started');
 })

bootstrap

if database "db" object specified in config then febby will try to connect database on bootstarp.

Parameters

  • fn Function Represents callback function which will called after app start up.

Examples

const febby = new Febby(config);
 // create router
 const api = febby.router('/api');
 const fn = (req,res,next)=>{
     // some logic or validation
     next();
 }
 const fn2 = async (req,res,next)=>{
     const db = febby.model(); // Returns db models object
     const users = await db.user.find({});
     // some validation logic on users
     next();
 }
 // this middleware runs on api router
 febby.middleware(fn,api);

 // this middleware runs on app router
 febby.middleware(fn);

 febby.route({
     router: api,
     method: 'get',
     path: '/:id',
     middlewares: [],
     handler: async (req, res, next) => {
         const user = febby.Model('user'); // get registered model by name
         const info = await user.findById(req.params.id);
         res.status(200).send(info);
     }
 });

// start the app 
 febby.bootstrap(()=>{
     console.log('app started');
 })

expressApp

Get Express App object

Examples

febby.shutdown();

shutdown

Shutdown app

Examples

febby.shutdown();

closeConnection

Close database connections

Examples

febby.closeConnection();