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
var sock = io.connect('http://localhost');
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

Controladores son middleware para usar Express

Views renderizados con EJS o el template
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


  1. Generar una nueva aplicación
  2. Scaffold de un modelo y su controlador
  3. Subir el servidor
  4. Ejemplos de requests al API
  5. Construir un TODO App

Database Support

Out of the Box:
  • MongoDB
  • Postgress
  • MySQL
  • Sails-Dirty








  • IRC
  • Twitter
  • 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