AngularJS with Node.js and MongoDB

Embed Size (px)

DESCRIPTION

how I went about picking a stack for my prototype web app

Text of AngularJS with Node.js and MongoDB

  • AngularJS Angular + Node/Express + MongoDB Brent Goldstein brent@kubilateam.com Full JS Stack
  • Back Story Build a prototype web app Why? -- Learn new technologies, act like a startup Focused on SMB enterprise use-cases Lots of data to visualize, manage What technologies to pick? Client Server Database
  • Strategy for picking Technologies Go with what works -- for you Youll need to learn new stuff, it should be fun If it seems like it does not fit, you can try something else If youre a perfectionist, youre done for Youll know when it feels right enough and stuff flows Caveat -- This works for me, figure out your strategy
  • Client? Lots of choices, but only a few - Im a software guy, needs to be like software - Must have good data-binding - Im not really into Java (yes, really) Ruby/Rails? - Ive done Ruby (ok, but review options...) Javascript Client Frameworks? - AngularJS - Ember
  • Javascript? Really? Hey, Ive never coded Javascript. Is this a language for real software? The answer is. (lets diverge for a moment)
  • Pick a server? I already said Im not into Java (really) OK, so what now? Well, it needs to be - Lightweight, FAST - OpenSource, Manageable Uhhh yep -- Node.js (more Javascript.)
  • Node + Express So, youre saying I should write my own server with Node.js? Yes, definitely. Because Express is frickn brilliant var express = require('express'),http = require('http'); var app = express(); app.use(express.static(path.join(__dirname, 'public'))); http.createServer(app).listen(app.get('port'), function(){ console.log('listening on port ' + app.get('port')); }); Static file server in a few lines...
  • Databases, databases A couple of considerations - Development, iteration effort - SQL schema migration and admin is a pain (to me) Data pipelining - How will the client model data? - ORM kinda sucks Should this be the first slide in the deck?
  • Crap, another slide on databases NoSQL pro/con - Align structure with application model less complex code, probably more performant - Cant use relational schema models Well, Im totally OK with this - Must learn collections and working w/o joins Im OK with this too - Fast read performance with right schema Im really OK with this
  • Yet another @#(*! slide on databases NoSQL Choices? - Proven in commercial apps - Good community acceptance/support - Im no expert, so just pick one to start with good Node.js support Lets go with MongoDB (at least try it)
  • Where are we at? Node.JS and MongoDB for the server side. These are both Javascript. Well, Mongo is very Javascript compatible, JSON data Now Im definitely into a pure JS client framework. Which one? Uhh, try AngularJS. Why? Gut feel after investigating both, it seems more like software.
  • Stack Data Pipeline MongoDB - JSON data works great Modeled for the app needs Server talks to Mongo - Aggregate / join data - JSON data works great NO ORM - Return through a pure REST api AngularJS client - Talks to server only via REST api, never to Mongo - JSON data works great NO ORM
  • Back to that Javascript thing Javascript is a good core language Very simple syntax, dont let this fool you (an aside, complex syntax does not a good language make) Closures are super powerful in an event based asynchronous environment And, its not just the language, its the ecosystem.
  • Javascript Client Server Similarities Browsers operates as - single threaded, event driven, asynchronous Node.js runs V8 engine Holy crap, its the same - single threaded, event driven, asynchronous Learn asynchronous Javascript programming with Angular + Node.js at the same time Start thinking closure
  • Javascript and Node Packages Huge capability from the NPM Registry NPM == Node Package Manager https://npmjs.org/ Some favorites: - mongodb (mongoDB driver) - express (web server framework) - xml2js (xml parser) - async (synchronizing constructs, serial, parallel) - aws-sdk (integrate with AWS S3, CloudFront, etc)
  • Deployment Again, use what works for your situation For me, PaaS to start with low admin overhead - Heroku -- Supports node servers - MongoLab -- Hosted MongoDB Both have free tiers for development, and scale up for true production
  • thanks contact: brent@kubilateam.com