AngularJS with Node.js and MongoDB

  • Published on
    31-Aug-2014

  • View
    13.098

  • Download
    3

Embed Size (px)

DESCRIPTION

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

Transcript

<ul><li> AngularJS Angular + Node/Express + MongoDB Brent Goldstein brent@kubilateam.com Full JS Stack </li> <li> 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 </li> <li> 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 </li> <li> 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 </li> <li> Javascript? Really? Hey, Ive never coded Javascript. Is this a language for real software? The answer is. (lets diverge for a moment) </li> <li> 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.) </li> <li> 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... </li> <li> 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? </li> <li> 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 </li> <li> 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) </li> <li> 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. </li> <li> 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 </li> <li> 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. </li> <li> 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 </li> <li> 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) </li> <li> 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 </li> <li> thanks contact: brent@kubilateam.com </li> </ul>