0.3.1 • Published 4 years ago

basic-controller v0.3.1

Weekly downloads
3
License
MIT
Repository
github
Last release
4 years ago

basic-controller

npm version Build Status Coverage Status

Basic implemetation of controllers for NodeJS

Installation

npm install basic-controller --save

Usage

Include

var Controller = require('basic-controller');

new Controller(controllerFilepath);

Create a instance of a controller.

Arguments
NameTypeDescription
controllerFilepathstringController file path.
Example

Controller File

// controllers/main/mainContoller.js
class MainCtrl {
  home () {
    // Make something cool
  }
  otherView () {
    // Make something else cool
  }
}
module.exports = MainCtrl;
// controllers/main/otherContoller.js
module.exports = function OtherCtrl () {
};

OtherCtrl.prototype.myView = function () {
  // Make great things
};

Controller instance

const MainController = new Controller('controllers/main/mainContoller.js');
const OtherController = new Controller('controllers/main/otherContoller.js');

controller.link(methodName);

Make a request handler to link a route with a controller method.

Arguments
NameTypeDescription
methodNamestringMethod name
Example
// controllers/mycontroller.js
class MyCtrl {
  myMethod () {
    // Make something cool
  }
}
module.exports = MainCtrl;
const app = express();
const MyCtrl = new Controller('controllers/mycontroller.js');
app.get('/myRoute', MyCtrl.link('myMethod'));

Reciving params

Each method receives as arguments the parameters in the route, followed by an object with these same parameters, the request and the response. example:

Example
// controllers/mycontroller.js
class MyCtrl {
  myMethod (params, req, res) {
    // Request: GET /myRoute
    // params: { }
  }
  anotherMethod(displayName, province, params, req, res) {
    // Request: GET /anotherRoute/alexander/bolivar
    // displayName: 'alexander'
    // province: 'bolivar'
    // params: { displayName: 'alexander', province: 'bolivar' }
  }
}
module.exports = MainCtrl;
const app = express();
const MyCtrl = new Controller('controllers/mycontroller.js');
app.get('/myRoute', MyCtrl.link('myMethod'));
app.get('/anotherRoute/:displayName/:province', MyCtrl.link('anotherMethod'));

Render view

When a request is handler through a controller method, the response will be the rendering of a view with the same name of the method in the views folder where the controller is if this view exists. The view is rendered with params returned in the called method.

Example
// controllers/mycontroller.js
class MyCtrl {
  myMethod () {
    return {
      displayName: 'Alexander'
    };
  }
}
module.exports = MainCtrl;
<!-- controllers/views/myMethod.ejs -->
<h1><%= displayName %></h1>
<p>
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quaerat facilis,
  ipsum laborum possimus. Assumenda, vitae repellat. Laudantium eos beatae,
  repellendus provident. Nam error voluptatem labore amet sit. Odio, explicabo,
  illum!
</p>
const app = express();
const MyCtrl = new Controller('controllers/mycontroller.js');
// Render view controllers/views/myMethod.ejs
app.get('/myRoute', MyCtrl.link('myMethod'));
app.set('view engine', 'ejs'); // Configure view engine

controller.setView(view=null)

Set a view to render.

Arguments
NameTypeDescription
viewstringView to render
Example
// controllers/mycontroller.js
class MyCtrl {
  anotherMethod () {
    this.setView('anotherView'); // render controllers/views/anotherView.ejs
  }
}

controller.render(view=null, locals = {})

To force render with render method. Is the action method return with render method call. Also in this case, is view doesn't exists an error will throwed.

Arguments
NameTypeDescription
viewstringView to render
localsobjectLocals to render view
Example
// controllers/mycontroller.js
class MyCtrl {
  anotherMethod () {
    // Render 'anotherView' view.
    return this.render('anotherView');
  }
  amazingMethod () {
    // Same view 'amazingMethod' with locals
    return this.render({
      myVar: 'myValue'
    });
  }
  anotherCustomMethod () {
    // Same view 'myView' with locals
    return this.render('myView', {
      myVar: 'myValue'
    });
  }
}

Troubles

If you have any kind of trouble with it, just let me now by raising an issue on the GitHub issue tracker here:

https://github.com/arondn2/basic-controller/issues

Also, you can report the orthographic errors in the READMEs files or comments. Sorry for that, English is not my main language.

Tests

npm test or npm run cover

0.3.1

4 years ago

0.3.0

5 years ago

0.2.1

5 years ago

0.2.0

6 years ago

0.1.0

6 years ago

0.0.3

6 years ago

0.0.2

6 years ago

0.0.1

6 years ago