5. node.js translates server concepts into
javascript-- the lingua franca for the every-
man
our event loop is faster than your thing
native bindings means Node can do pretty
much anything
core is purposefully feature-sparse
npm publish, nuff said (lower barrier to
entry)
•
•
•
•
•
11. Programming
realtime apps
was still not
trivial.
WebSocket and HTTP messages/
requests have to be handled
independently, which leads to
separate code bases for
realtime and traditional server
code.
12. Programming
realtime apps
was still not
trivial.
WebSocket and HTTP messages/
requests have to be handled
independently, which leads to
separate code bases for
realtime and traditional server
code.
Socket programming is a new
paradigm for many modern web
developers
13. WebSocket and HTTP messages/
requests have to be handled
independently, which leads to
separate code bases for
realtime and traditional server
code.
Socket programming is a new
paradigm for many modern web
developers
Questions about scalability
Programming
realtime apps
was still not
trivial.
16. Express wasn’t
“structured
enough”
Authentication has to be rolled
from scratch
No standard,
implementation-agnostic method
of working with datastores
Low level and free-form -- not a
lot of guidelines for teams used
to convention-over-configuration
frameworks
18. Lots
of different
kinds of
projects
There weren’t really any simple
and reproducible patterns for
structuring complicated Node.js
aplications top to bottom
Could be working with an
existing client, or writing a new
client for a mobile web browser,
an automobile, a toaster, or god
knows what
19. Lots
of different
kinds of
projects
There weren’t really any simple
and reproducible patterns for
structuring complicated Node.js
aplications top to bottom
Could be working with an
existing client, or writing a new
client for a mobile web browser,
an automobile, a toaster, or god
knows what
Lots of different 3rd party
proprietary services to deal with
on the back-end -- there was no
standard way to integrate new
systems
22. MVC structure
Sails.js is modeled after the same
convention-over-configuration philosophy
you’re used to from frameworks like Rails,
Grails, Symfony, and Zend.
Controller actions are just Express middleware
Views are ejs by default, but you can use
jade, etc. We rarely use them since we’re
normally making single page apps with
client-side templates.
23. Lightweight ORM
Kept querying semantics dead-simple and
adapter-agnostic whenever possible
Pulled the best of Active Record,
Hibernate, and Mongoose
Made it easy to add purpose-built adapters
at the app level
24. Policies
Policies are just more Express middleware
They can be chained together to “protect”
or preprocess requests for controllers
E.g. access control, storage quotas, or
anything else you’d want to use
middleware for
25. Socket.io Request
interpreter
Translated incoming socket.io messages into
Express requests
Translated res.send(), res.json(), and res.view()
to respond via the socket, as well as allowing
for streams
Added res.broadcast() and req.join() methods
for pubsub
Normalized configuration
26. Blueprints
Instead of something like Rails HTML
scaffolds, by default, when you generate a
model and controller, Sails serves an API
Built-in search, sort, pagination, and
complex queries
Authentication/access control can be built
on top using policies
27. Other
cool
stuff
CLI tool
REPL
Custom adapters
Optional server-side coffee
support
Automatic asset bundling (LESS
and coffeescript files are
compiled, merged with css and js,
and injected into the DOM,
minified in production mode)
Uses grunt by default, but can be
replaced by ant, gulp, maven,
etc.
28. associations
• should upgrade not only Waterline
(ORM), but also RESTful blueprints
and model-focused publish/
subscribe (pubsub) methods.
• cross-adapter
• cross-connection
• efficient as possible, allowing more
efficient solutions to be implemented
at the adapter layer
Sturday, Jauary 25, 4
31. cross-connection
• different hosts (servers)
• different database users
• nasty/annoying integrations w/
legacy data
e.g. join two different MySQL
databases with incompatible
schemas
•
32. how it works
• when possible, use native
optimizations (i.e. joins) at the
database layer
• in-memory joins for the rest, just
like you would have to do in code
• maintains multiple connection pools
33. impact on adapters
• Existing Sails adapters (and any
new ones you write) now support
associations out of the box,
without writing any additional
code.
• You can add a `join()` method
that will be used instead of
`find()` for running intra-
database associations queries.
36. Community is flourishing (over 6000 stars /
600 forks on github, active IRC channel and
Google group)
My company and most of our customers are
using Sails in production
CURRENT STATUS (V0.9.13)
37. My company and most of our customers are
using Sails in production
Oldest running production Sails apps
havs been up for over 2 years
CURRENT STATUS (V0.9.13)
Community is flourishing (over 6000 stars /
600 forks on github, active IRC channel and
Google group)
38. extending sails
• adapter interface: standards for how our
servers talk to databases and web services
• blueprint interface: standards for how our
servers offer up their own API-- start with
conventional setup, then jump into writing
custom code later.
generators: plugins that allow sails new and
sails generate output to be completely
overridden and/or extended
• hooks: plugins that allow components
of the Sails runtime to be overridden or
extended
•
40. blueprints
• generic impl. for HTTP/ socket APIs
• prioritizes usability / practicality over elegance
• declarative configuration
(e.g. ember expects a certain format, or
angular prefers a certain JSONP parameter)
• overridable
(can replace logic completely with
imperative code at a moment’s notice)
43. Want to get involved?
Contribute to an adapter
44. Want to get involved?
Contribute to an adapter
improve the documentation
45. Want to get involved?
Contribute to an adapter
improve the documentation
Write tutorials
46. Want to get involved?
Contribute to an adapter
Improve the documentation
Write tutorials
Blog about Sails
47. Contribute to an adapter
improve the documentation
Write tutorials
Blog about Sails
Build an integration with your
product or API (it's pretty easy)
Want to get involved?