basic-controller
v0.3.1
Published
Basic implemetation of controllers for NodeJS
Downloads
8
Readme
basic-controller
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
Name | Type | Description
----------------------|-----------|-------------
controllerFilepath
| string
| Controller 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
Name | Type | Description
--------------|-----------|-------------
methodName
| string
| Method 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
Name | Type | Description
--------|----------|-------------
view
| string
| View 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
Name | Type | Description
----------|----------|-------------
view
| string
| View to render
locals
| object
| Locals 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