Sails cross-talk
RUBY.DO
Disclaimer
Node.JS
Tres formas de instalar en OS X:
new kid on the block
Some references
- Node packages == Ruby Gems
- Package.json ~ gemfile, shows installed packages and dependencies
- Dependencies are handled in node.js using the javascript library require.js
package.json
{
"name": "sailsExample",
"version": "0.0.0",
"description": "My Sails application",
"dependencies": {
"sails": "0.8.94",
"optimist": "0.4.0",
"mongo": "~0.1.0"
},
"scripts": {
"start": "node app.js",
"debug": "node debug app.js"
},
"main": "app.js",
"license": "MIT"
}
NON-BLOCKING
WHAT'S THE BIG DEAL?
(besides, you know, running freaking javascript on the server side!!)
HTTP.JS
EXPRESS.js
Express.JS Scaffolding
Socket.io
//Code For Server
var
io = require(
"socket.io"
);
io.sockets.on(
"connection"
,
function
(sock) {
sock.emit(
"welcomeMessage"
, { hello:
"world"
});
}
io.listen(80);
//Code For Client
sock.on(
'welcomeMessage'
,
function
(json) {
//Handle Event Received
});
Pero no era de sails que
ibamos a hablar?
- Socket messages y Express requests tienen que ser manejados de forma independiente
- Socket programming es un paradigma nuevo para muchos web developers
- Autenticación en express hay que construirla desde cero
- No había una implementación agnóstica de un data store (sequelize y jugglingdb ??)
Sails.JS
Current State of affairs
FRAMEWORKS:
actionHero, archetype ,aries, blueprint
broke, Capsela ,Cargobox, chain, Coffeemate, COKE ,CompoundJS, Crux
Derby, djangode ,drty, Drumkit, Express ,Ext, Flatiron
Geddy, GenJi ,Grasshopper, Impress, JaxServer, jimi ,josi, Kassit
Katana, Kiss ,Locomotive, merlin, Meryl, Mojito ,Monorail,
nCombo, node ,nodemachine, nodepress, Omni, partial ,PieJS, pintura
pomelo, Protos ,QuickWeb, rAppid, Sails, Sayndo ,Seek, simpleS
SocketStream, spludo ,Stick, Tachi, Tower, webjs ,websvr, Zeppelin, TrinteJS
CURRENT STATE OF AFFAIRS
VIEW ENGINES
asyncEJS, bake, bind, Blade, bliss, blue
CoffeeKup, combyne, Dietsyntax
doT, DryKup, dust, Eco, ECT, egs, ejs, fest
fgenmustache, gaikan, genapp, haml, haml, handlebars
Jade, jazz, JinJS, Jinsoku, jm, jqtpl, jsdom, jshtml, Kiwiwith,
Liquor, Lite, ltxb, minstache, minimal, MinnaHtml, Mu,
nTPL, nunjucks, Parrot, Pencil, Plates, PURE, QEJS, raptor
Razor, scraps, shift, simpleT, stencil, Swig, Teddytemplating
Templ8, template, thunder, tmpl-node, tob, TOFFEE, tpl, TSN
TwigJS, weld, wieldyjs, whiskers, xmlb, xmlbuilder
Sails.js
Convention-over-configuration. Imita patrón MVC de frameworks como RoR
Orientado a desarrollar APIs para ser
consumidos por Single Page Apps
consumidos por Single Page Apps
Controladores son middleware para usar Express
Views renderizados con EJS o el template
engine que más te guste
engine que más te guste
Algunos Features
- Database Agnostic
- RESTful APIs en vez de scaffolds
- Soporte para Socket.io/WebSockets
- Seguridad basada en policies
- ORM permite queries complejos,
con paginación, búsqueda, y sorting - Asset bundling
What's the catch
Express syntax for socket.io requests
One way to make http and socket requets
Real abstraction of data store management
Access to express and socket.io functions still there
Highly encouragement for community participation
SAILS.JS Libraries/Components
- Sails
- Anchor (node-validator)
- Waterline (adapters)
- Mast (backbone)
Demo
- Generar una nueva aplicación
- Scaffold de un modelo y su controlador
- Subir el servidor
- Ejemplos de requests al API
- Construir un TODO App
Database Support
Out of the Box:
- MongoDB
- Postgress
- MySQL
- Sails-Dirty
- IRC
- JSDom
Community:
- Redis
- Riak
- Couch
The bad parts
- No hay asociaciones (issue 124)
- Versión actual estable 0.9.3
- Algunos adapters aún no terminados
- No hay control sobre la minificación
- No hay documentación sobre Blueprint
ROADMAP
~Julio 2013
- Associations
(cross-model/cross-adapter)
- Refactor manejo de Assets
- More Front-End Examples
Examples
Referencias
Sails Cross-Talk
By Ahmed Ayub
Sails Cross-Talk
- 2,922