1.0.0 • Published 4 years ago

invertly v1.0.0

Weekly downloads
-
License
MIT
Repository
-
Last release
4 years ago

Invertly

Invertly is a lightweight module system for building very large Node.js applications.

Core Features

  • Built in clustering/crash protection
  • A module system

Installation

$ npm install invertly

Module System

Building large Node.js apps is hard. The larger they grow, the more difficult it becomes to not throw yourself from your 4th story office window onto the delicious mediterranean food truck below. This is where the module system comes in.

It's quite simple. Create a folder that will contain your modules. Each module is a single file that looks like this.

module.exports = function (app, register) {
  // module code here
};

You could, for instance, have 2 modules in your modules folder.

// cats
module.exports = function (app, register) {

  app.put('/cats/:name', function (req, res) {
    var catName = req.params.name;
    var catData = req.body.catData;

    // add cat to cat database

    res.end(200);
  });

  function speak () {
    console.log("meow!");
  }
}

  register({
    speak: speak
  });
};

register() must be called to register the module with Invertly.

// dogs
module.exports = function (app, cats, register) {

  app.put('/dogs/:name', function (req, res) {
    var dogName = req.params.name;
    var dogData = req.body.dogData;

    // add dog to dog database

    res.end(200);
  });

  // access to dependencies
  cats.speak();

  register();
};

You modules folder must contain an index.json file that looks like this:

{
  "cats": {
    "dependencies": ["app"]
  },
  "dogs": {
    "dependencies": ["app", "cats"]
  }
}

And finally, your main server.js (or whatever you typically name this file) will look something like this:

var invertly = require('invertly');
var express = require('express');

var app = express();

invertly.register("app", app); // this is how you register arbitrary objects so modules have access to them
invertly.initialize(__dirname + '/modules/'); // trailing slash is optional

invertly.run(app, 5000); // invertly.run takes a callback of the form function (req, res) { . . . }

Module Directory Structure

This describes the above example.

/app
 |-- server.js
 |-- app/modules
      |-- cats.js
      |-- dogs.js
      |-- index.json

Clustering

Clustering is built into Invertly. When using environments like Heroku (like we do), it's difficult (impossible) to use tools like Forever or PM2.

invertly.run(app, 5000);

Calling this will start your application on all available cores, and will keep at least a single instance alive in the event of a crash or an exception. If you have no need for this, you can simply pass a callback to invertly.initialize which will execute once invertly has finished initializing.

var http = require('http');
var invertly = require('invertly');
var express = require('express');

var app = express();

invertly.register("app", app);
invertly.initialize(__dirname + '/modules/', function () {
    http.createServer(app).listen(5000);
});
1.0.0

4 years ago

0.6.0

4 years ago

0.4.0

4 years ago

0.3.0

4 years ago

0.2.0

4 years ago

0.1.1

9 years ago

0.1.0

9 years ago