npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

ever-js

v1.1.3

Published

Easy with extended restify

Downloads

18

Readme

Gitter Issues bitHound Score Code Climate

Enjoyment Via Easiness of Restify - js

npm package


This framework is completely based on Restify.



Installing the framework

Please note that, -g is required to use.

npm install -g ever-js

Building the first app

Follow the below mentioned steps to create the first application.

mkdir MyFirstApp
cd MyFirstApp/

Then run following command to initialise framework.

everjs init

Folder structure

MyFirstApp/
    |-routes/
    	|--Routes.js
	|-lib/
		|--SampleLib.js
	|-configuration/
		|-global/
			|--common.json
			|--default.json
			|--production.json
		|--RestifyConfig.js
	|-handlers/
		|--MongoHandler.js	
	|-filters/
		|--SampleFilters.js
	|-middleware/
		|--SampleMw.js
	|-kernel/
		|--Banner.js  
		|--Kernel.js  
		|--Server.js
	|--main.js
	|--package.json

Global Variables


|Variables |Usage | |--------------|---------------------------------| | _ | This is Lodash module. eg: _.forEach| | GlobalConfig | Configureation values based on the environment(default.json or production.json) and common.json To access environment based setting values. GlobalConfig.[setting value] eg :GlobalConfig.db.mongoTo access Common Values in commong.jsGlobalConfig.Common.[setting value] eg: GlobalConfig.Common.db_handlers| | Dbh | Contains the Database handlers. Eg: Dbh.Mongo | | Lib | Contains modules defined in lib/ folder. Eg: Lib.SampleLib.sampleFunction(); (not avaialbe to use inside lib/ )|


handlers/


This contains all the handler modules.


MongoHandler.js

This handler manage Mongo Database connections.

Usage of Mongo Hanlder.

sampleFunction : function() {
	Dbh.Mongo.connect(function(err, db){
    			db.collection("Test").find({}).toArray(function(err, result) {
        		console.log(result);
    		});
	});
}

routes/


This contains all the routing information. These settings are stored in Routes.js

Structure of the Routes.js as follows.

module.exports = {

    getRoutes : function(dependencies) {

        var userFilters = dependencies.UserFilters;
        var userMiddleware = dependencies.userMiddleWare;

        return {            
            GET: [],
            POST: [],
            PUT: [],
            DELETE: []
            }
	}
}
  • GET holds all the routings uses http GET method

  • POST holds all the routing uses http POST method

  • PUT holds all the routing uses http PUT method

  • DELETE holds all the routing uses http DELETE method

  • Adding a new route Following is the syntax for adding a route.

HTTP_METHOD : [
	{
		config: {
	    	path: 'Patter of the route',
	    	isSecure: true | false 
		},
		method: userMiddleware.[Middleware Name].[Method Name],
		filters: [filter 1, filter 2, ...]
	}	
]
  • config
  • path - Pattern of the route

  • isSecure - If set true, a authentication function must be set in the config section as mentioned below section.

  • method - Holds middleware to execute on particular pattern

  • filters - Executes before the Middleware defined in the method section.

The sample Route file is as follows.

module.exports = {

    getRoutes : function(dependencies) {
        var userFilters = dependencies.UserFilters;
        var userMiddleware = dependencies.userMiddleWare;
        return {
            	GET: [
                	{
                    	config: {
                        	path: '/get-sample-route-no-filter',
                        	isSecure: false
                    	},
                    	method: userMiddleware.SampleMw.getWithoutFilters,
                    	filters: []
                	},
                	{
                    		config: {
                        		path: '/get-sample-route-with-filter',
                        		isSecure: true
                    		},
                    		method: userMiddleware.SampleMw.getWithFilters,
                    		filters: [userFilters.SampleFilters.sampleFilter]
                	}
            	],
            	POST: [],
            	PUT: [],
            	DELETE: []
            }
	}
}

lib/


Please refer the sample filter file

Node modules added to this folder can be access via User Middleware and filters.

Syntax for accessing the Lib files.

Lib.[Module file name].[function name]()

Example:

sampleFunction() in SampleLib.js module accessible as follows.

Lib.SampleLib.sampleFunction();

configuration//


This folder contains the main config file RestifyConfig.js

  • AuthFunction section
  AuthFunction : function(dependencies){

In this section, if you do not have any authentication filter, use as follows.

	return false;

Else, follow below mentioned syntax,

	return dependencies.filters.[Filter name].[Authentication function name] ;

example:

   return dependencies.filters.SampleFilters.sampleAuthFilter;
  • AppConfig section

This section is dedicate to Restify Create Server paramters

  AppConfig : function(dependencies){

You can add create server parameters as follows,

{
  certificate: ...,
  key: ...,
}

This section has the

  • Application name retrieves from package.json
  • Server Port, which is default to 8312 or can be set using an environment variable : RESTIFY_PORT
  • Listen address, which is to all the connections or can be set using an environment variable: RESTIFY_ LISTEN_IP
  name: dependencies.packageJson.name,
  port : 8312 || process.env.RESTIFY_PORT,
  address : "0.0.0.0" || process.env.RESTIFY_LISTEN_IP
  • RestifyMiddlewareSet section

This section is used to load the Restify plugins

  RestifyMiddlewareSet : function(dependencies) {

Following plugins are loaded as default settings

  dependencies.restifyObject.acceptParser(dependencies.serverObject.acceptable),
  dependencies.restifyObject.gzipResponse(),
  dependencies.restifyObject.queryParser(),
  dependencies.restifyObject.bodyParser()
  • RestifyPre section

This section is used to load Restify's pre() modules.

  RestifyPre : function(dependencies) {

Use the following syntax to load the load the modules.

dependencies.restifyObject.[pre filter|pre function|pre module]

Example :

return [
          dependencies.restifyObject.pre.sanitizePath(),
          dependencies.restifyObject.pause()
    ];

configuration/global/

Contains all the configuration values based environment. If NODE_ENV is NOT defined, default.json is loaded. for Production configuration values.

export NODE_ENV=production

| File name | Descriptions | Environment |---|---|---| |default.json| contains none production environment values. | default environment. | |production.json| contains production enviroment values. | Production | |common.json|Contains common values for both the enviroments | All |


default.json

{
	"environment" : "default",
	"connectionStrings" : {
		"mongo" : "mongodb://127.0.0.1/test"
	}
}

production.json

{
	"environment" : "production",
	"db" : {
		"mongo" : "mongodb://127.0.0.1/test"
	}
}

common.json

{
	"port" : "8312",
	"address" : "0.0.0.0",
	"db_handlers" : {
		"Mongo" : {
			"enable" : true,
			"libPath" : "../handlers/MongoHandler.js"
		}
	}
}

db_handlers contains the information of each Database handler. libPath must be defined relative to the kernel/


filters/


Please refer the sample filter file

Contains the functionality which executes prior to assigned user middleware.

Node modules added to this folder can be access from Routes.js.

Format of the filter function is very important !!!

Please follow below mentioned format for filter function.

function(req, res, next) {
        //Your logic goes here
        next();
}

sample filter :

sampleFilter : function(req,res,next) {
        console.log("Sample Filter.");
        next();
}

Syntax for accessing the filter files from Routes.js.

userFilters.[Filter file name].[filter function name]

Example:

sampleFilter() in SampleFilters.js module accessible as follows.

userFilters.SampleFilters.sampleFilter();

middleware/


Please refer the sample filter file

Contains the functionality which executes based on the route patterns.

Node modules added to this folder can be access from Routes.js.

Format of the Middleware function is very important !!!

Please follow below mentioned format for filter function.

function(req, res, next) {
        //Your logic goes here
}

sample Middleware :

getWithoutFilters: function (req, res, next) {
   res.send(200, {msg: "GET Without Filters"});
},

Syntax for accessing the filter files from Routes.js.

userMiddleware.[Middleware file name].[Middleware function name]

Example:

getWithoutFilters() in SampleMw.js module accessible as follows.

userFilters.SampleMw.getWithoutFilters;

kernel/


Contains the heart of the framework. Try not to edit this.

But, be my guest to suggest any modification.

  • Kernel.js - Loads all the dependencies and pass them to modules.
  • Server.js - This is where Restify server loads all the routes, lib, middleware, filter and configs.
  • Banner.js - Just prints my logo :)

main.js


Executes the kernel of the framework. Not much to see.


package.json


Default package.json for the current application. You can add any dependencies which required. But, please do not remove any existing ones.