Packet-Oriented Framework for ES6 and Express.
##Table of Contents:
- ECMAScript 6
- Getting started
- Packages
- Models
- Controllers
- Routes
- Middleware on Routes
- Restful APIs
- Templates engines
- Tests
rode.js framework is a stable way to use ES6 today. ES6 support is provided by traceur, es6-shim and es6-module-loader.
rode.js is based on Express, but we not rewrite it, you can still using all the features of Express.
Install rode.js globally and generate a new project:
# npm install -g rode
$ rode new --view ejs --css less --sessions myProject
Install project dependencies:
$ npm install
Start the server:
$ node app
Usage of rode new:
Usage: rode new [options] [dir]
Options:
-h, --help output usage information
-V, --version output the version number
-v, --view add view engine support (jade|ejs|hogan|soy) (defaults to jade)
-c, --css add stylesheet support (less|stylus|css) (defaults to plain css)
A package (or bundle) is a component of your application with its own MVC.
You can simply create a new package with the command:
$ rode generate PackageName
Usage: rode generate package <package>
Options:
-h, --help output usage information
-r, --rest config rest api for this package
-f, --force force on existing package
In a model you should add all your business logic:
import { Model } from 'rode/loader'; export class MyModel extends Model { /** * Sample method, converts a string to upper case */ sampleMethod(str) { return str.toUpperCase(); } }
You can generate a Model myModel for a package User with the command:
$ rode generate User:model myModel
Controllers and Routes works together to facilitate the routing of the application.
A controller looks like:
export class HelloController { /** * sayHello Action */ sayHello(req, res) { res.render('index', { title: 'Hello World!' }); } }
You can generate a Controller myController for a package User with the command:
$ rode generate User:controller myController
A route for the above controller looks like:
import { Router } from 'rode/loader'; var router = new Router(); /** * [GET] / * Calls HelloController.sayHello */ router.add({ controller: 'Hello', // defaults 'Main' pattern: '/hello', action: 'sayHello', method: 'GET' // defaults 'GET' }); export {router};
Here's an example of how to define a middleware on routes:
export class UserController { showPrivateData() { return [ (req, res, next) => { // Check permissions next(); }, (req, res) => { // Show Private Data } ]; } }
Make a Restful API can not be more easy.
Create your REST package with the command:
$ rode generate package PackageName --rest
Or add router.restApi = '/api/products'; on the routes.js of any package.
Now you should create methods on your RestController.js following simple naming conventions.
Here are some examples:
// [GET] /api/products get(req, res) { ... } // [POST] /api/products post(req, res) { ... } // [GET] /api/products/sponsored getSponsored(req, res) { ... } // [PUT] /api/products/sponsored putSponsored(req, res) { ... } // [POST] /api/products/sponsored/today postSponsoredToday(req, res) { ... } // [GET] /api/products/:id getById(req, res) { ... } // [POST] /api/products/:id postById(req, res) { ... } // [DELETE] /api/products/:id deleteById(req, res) { ... } // [GET] /api/products/:id/comments getByIdComments(req, res) { ... } // [PUT] /api/products/:id/comments/:id2 putByIdCommentsById(req, res) { ... }
You can create as many combinations as you like.
Remember that each package can have its own RestController.js
rode.js supports all this templates engines:
- Jade (default template)
- Ejs (using ejs-locals)
- Hogan.js
- Google Closure Templates
- Since you still can use express, you can use any template that express support
You can run the test with the command:
$ grunt test