node package manager




moduleLoader is a basic extension for webservice.js that provides an eased way to support multiple modules surfacing multiple methods as Web Services.


The basic syntax is as follows:

  modulesPath: '/api',
  title: "The long name of your product",
  name: "A short name",
  version: "0.1.0",
  endpoint: "http://localhost:8080"

Basic usage with webservice.js:

var webservice  = require('webservice'),
    api         = require('./api'),
    colors      = require('colors');
console.log(' > stand-alone json webservice started on port 8080'.cyan);

Advanced Usage:

At times it may be necessary for one module to call methods from another module. In this scenario the easiest way is to create a global api.js (or whatever name you want) that requires moduleLoader and returns it. An example of the api.js could be:

module.exports = require('moduleLoader')({
                    modulesPath: '/api',
                    title: "My REST Library",
                    name: "RLIB",
                    version: "0.1.0",
                    endpoint: "http://localhost:8080"

Then inside each module you would include the new api.js file within the calling method when you need to call a method from another module:

exports.echoProxy = function(options, callback){
  // Calls the echo method already defined in the API
  require('../api').echo(options, callback);
exports.echoProxy.schema = {
  msg: { 
    type: 'string',
    optional: false,
    message: "msg variable is required"
exports.echoProxy.description = 'This is a proxy wrapper around the API echo method.';

How is works:

At the basic level moduleLoader scans the supplied folder for .js files and then requires them creating a temporary variable to hold the module.export that is returned. This temporary variable is then walked and used to expand on a local object. Finally, once all of the files have been loaded, this new object is returned.

Future plans:

Hopefully support for dynamic reloads will be added. This should also add in the functionality to load new modules when they are put into the watched directory.