https://github.com/projectweekend/express-classy
A set of classy route handlers
https://github.com/projectweekend/express-classy
Last synced: over 1 year ago
JSON representation
A set of classy route handlers
- Host: GitHub
- URL: https://github.com/projectweekend/express-classy
- Owner: projectweekend
- License: mit
- Created: 2015-03-22T17:54:43.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2015-04-11T15:46:32.000Z (about 11 years ago)
- Last Synced: 2025-02-01T19:29:44.626Z (over 1 year ago)
- Language: JavaScript
- Size: 199 KB
- Stars: 0
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
After building quite a few APIs with Node.js and Express over the last couple years, I started forming some strong opinions about what I liked and disliked. I had gotten very familiar with the [async](https://github.com/caolan/async) library, and rightly so. It's a great tool for maintaining control in the face of all those callbacks. However, I was always left wanting something that felt a little more structured. I wanted a pattern, something I could lean on to standardize the way I do things. Since API routes have common high-level components (validating a request, performing an action in the database, returning a response, etc), `express-classy` is my take on organizing and controlling the logic flow in Express route handlers.
## Example
**add_person.js:**
```javascript
var util = require( "util" );
var CreateHandler = require( "express-classy" ).CreateHandler;
module.exports = AddPerson;
function AddPerson () {
CreateHandler.call( this );
}
util.inherits( AddPerson, CreateHandler );
AddPerson.prototype.validate = function() {
this.req.checkBody( "firstName", "'firstName' is required" ).isLength( 1 );
this.req.checkBody( "lastName", "'lastName' is required" ).isLength( 1 );
var validationErrors = this.req.validationErrors();
if ( validationErrors ) {
return this.emit( "invalid", validationErrors );
}
var person = {
firstName: this.req.body.firstName,
lastName: this.req.body.lastName
};
return this.emit( "create", person );
};
AddPerson.prototype.action = function( person ) {
// add 'person' to the database here
// if error, emit "error", passing the error
// if successful, emit "done", passing the data for response
};
```
**routes.js:**
```javascript
var express = require( "express" );
var router = express.Router();
var AddPerson = require( "./add_person" );
var addPerson = new AddPerson();
router.post( "/person", function ( req, res, next ) {
addPerson.handle( req, res, next );
} );
module.exports = router;
```