Fist is a nodejs framework designed to help create scalable server applications.
##What do I get?
#####Plugin system Modular application structure. Automatic project files loading.
fist_plugins/ models/ user.info.js news.list.js news.available_list.js controllers/ news_page.js #####Loosely coupled architecture Focus on unit development. Encapsulated business logic.
app.unit({ name: 'news.available_list', deps: ['news.list', 'user.info'],#####Data models Simple and intuitive data structures. Unobtrusive data typing.
{ errors: {}, result: { news: { available_list: [ { type: "post", visibility: "all",#####Thin controllers Just check that your models are valid.
app.unit({ name: 'news_page', deps: ['news.available_list'], main: function (track, context) { if (context.e('news.available_list')) { track.status(500).send();#####Built-in logging tools Always clear what happening and where. More reliability.
app.unit({ name: 'user.info', main: function (track, context) { context.logger.debug('Checking user by sessid\n"%s"', track.cookie('sessid'));#####Built-in cache Just specify what parts of your program can be cached. Less loading. More responsiveness.
app.unit({ name: 'news.list', maxAge: 5000,##Hello, world!
$ npm install fistapp.js:
var fist = require('fist'); var app = fist(); app.listen(1337);fist_plugins/routes.js:
module.exports = function (app) { app.route('GET /hello/(<name>/)', 'hello_page'); };fist_plugins/controllers/hello_page.js:
module.exports = function (app) { app.unit({ name: 'hello_page', deps: ['greeting_data'], main: function (track, context) { track.send(context.r('greeting_data.helloText')); } }); };fist_plugins/models/greeting_data.js:
module.exports = function (app) { app.unit({ name: 'greeting_data', main: function (track, context) { return { helloText: 'Hello, ' + context.p('name') }; }, params: { name: 'what is your name?' } }); };$ node app.jsSee the full example code
###Quick start
##Docs
LICENSE MIT