mean stack warm-up

47
MEAN Stack Warmup PeopleSpace 29 Nov 2016

Upload: troy-miles

Post on 20-Jan-2017

154 views

Category:

Software


0 download

TRANSCRIPT

Page 1: MEAN Stack Warm-up

MEAN Stack WarmupPeopleSpace 29 Nov 2016

Page 2: MEAN Stack Warm-up

Troy Miles• Troy Miles aka the RocknCoder

• Over 37 years of programming experience

• Speaker and author

• bit.ly/rc-jquerybook

[email protected]

• @therockncoder

• Now a lynda.com Author!

Page 3: MEAN Stack Warm-up

Build Mobile Apps!

• Develop mobile apps with Ionic and AngularJS

• Learn the Ionic CLI

• Fetch data via ajax

• Deploy your app to Android & iOS

• bit.ly/ionicvideo

Page 4: MEAN Stack Warm-up

Affordable JavaScript Weekend Workshops @PeopleSpace

• MEAN Stack / Jan 28 + 29 Create Full Stack Web Apps in JavaScript

• Intro to React / Feb 18 + 19 Deep dive into the Super Popular Library for Build UIs

• Angular 2 / Mar 11 + 12 A Deep Dive into the Latest Version of the Popular Front End Framework by Google

Page 5: MEAN Stack Warm-up

20% off 24 Hours Only

code: ROCKNCODER20Expires 11/30/2016

meanstackweekend.eventbrite.com

Page 6: MEAN Stack Warm-up

Tonight’s Agenda• What is the MEAN Stack?

• Heroku

• MongoDB

• NodeJS + Express

• Angular 2

• Some code

Page 7: MEAN Stack Warm-up

What is the MEAN Stack?

• MEAN is a free and open-source JavaScript software stack for building dynamic web sites and web applications.

• Term coined by Valeri Karpov

Page 8: MEAN Stack Warm-up

MongoDB

• MongoDB is an open-source, document database designed for ease of development and scaling.

• v3.2

• Initial release - 2009

• https://www.mongodb.org/

Page 9: MEAN Stack Warm-up

Express

• Fast, unopinionated, minimalist web framework for Node.js

• v4.14

• http://expressjs.com/

Page 10: MEAN Stack Warm-up

Angular

• HTML enhanced for web apps!

• v2.2.3

• https://angular.io/

Page 11: MEAN Stack Warm-up

NodeJS

• Node.js® is a platform built on Chrome's V8 JavaScript runtime for easily building fast, scalable network applications.

• v7.2.0

• https://nodejs.org/

Page 12: MEAN Stack Warm-up

Git + GitHub

• Free and open source distributed version control system

• v2.8

• https://git-scm.com/

• https://github.com/

Page 13: MEAN Stack Warm-up

Benefits of the MEAN Stack

• Isomorphic JavaScript

• Open Source / Community Driven

• Performance

• Low Cost

Page 14: MEAN Stack Warm-up

Isomorphic JavaScript• One language all the way thru

• Client/Server JavaScript

• JSON as the data transport format

• BSON as the data storage format

• JavaScript to control Mongo DB

Page 15: MEAN Stack Warm-up

Why is JavaScript Beautiful?

• It is a Functional Language - Closer to Lisp and Scheme than Java or C

• First Class Functions

• Dynamic Objects

• Loose Typing

• and more...

Page 16: MEAN Stack Warm-up

ECMAScript VersionsVersion Date

ES1 June 1997

ES2 June 1998

ES3 December 1999

ES4 DOA 2006

ES5 December 2009

ES6/ES2015 June 2015

ES2016 2016

Page 17: MEAN Stack Warm-up

How to use ES6 today?

• Use only the latest browsers

• Use a transpiler: Babel, Traceur, Closure, TypeScript

• Use Node.js

• https://kangax.github.io/compat-table/es6/

Page 18: MEAN Stack Warm-up

Heroku

Page 19: MEAN Stack Warm-up

Installation• Create a free heroku account at:

• https://www.heroku.com

• Download + install heroku toolbelt at:

• https://toolbelt.heroku.com/

• (the account is free, no credit card necessary)

Page 20: MEAN Stack Warm-up

Deploy to Heroku• heroku login

• heroku create <app-name>

• (must be unique)

• git push heroku master

• heroku open

Page 21: MEAN Stack Warm-up

MongoDB

Page 22: MEAN Stack Warm-up

Top DB Engines1. Oracle

2. MySQL

3. MS SQL Server

4. MongoDB

5. PostgreSQL

6. DB2

7. MS Access

8. Cassandra

9. Redis

10.SQLite

Page 23: MEAN Stack Warm-up

Who Uses It?• Craigslist

• eBay

• Foursquare

• SourceForge

• Viacom

• Expedia

• LinkedIn

• Medtronic

• eHarmony

• CERN

• and more

Page 24: MEAN Stack Warm-up

When to Use Mongo?• Document Database

• High Performance

• High Availability

• Easy Scalability

• Geospatial Data

Page 25: MEAN Stack Warm-up

What is a Document?• An ordered set of keys and values

• Like JavaScript objects

• No duplicate keys allowed

• Type and case sensitive

• Field order is not important nor guaranteed

Page 26: MEAN Stack Warm-up

Node.js

Page 27: MEAN Stack Warm-up

Node v7• Merged with the io.js project, which was at 3.x

• New version of Chrome V8

• Supports ES6

• Faster

• node -v

Page 28: MEAN Stack Warm-up

Node Package Manager

• Or npm for short

• version: npm -v

• upgrade npm: npm install npm -g

Page 29: MEAN Stack Warm-up

package.json• required properties (error if missing)

• name & version

• optional properties (warning if missing)

• description, repository, & license

• other properties

• scripts, dependencies, config, etc.

Page 30: MEAN Stack Warm-up

Using Environment Vars

• process.env object holds environment vars

• Reading: var dbConnect = process.env.dbConnect;

• Writing: process.env.mode = ‘test’;

Page 31: MEAN Stack Warm-up

Express

Page 32: MEAN Stack Warm-up

Installation• npm install express-generator -g

• express <app name>

• cd <app name>

• npm install

• npm start

Page 33: MEAN Stack Warm-up

Angular

Page 34: MEAN Stack Warm-up

Angular 2 main concepts• Component

• Data binding

• Service

• Directive

• Dependency injection

• Module

Page 35: MEAN Stack Warm-up

Metadata

• Metadata is extra information which gives angular more info

• @Component tells angular the class is a component

• @Directive tells angular the class is a directive

Page 36: MEAN Stack Warm-up

Component• A class with component metadata

• Responsible for a piece of the screen referred to as view.

• Template is a form HTML that tells angular how to render the component.

• Metadata tells Angular how to process a class

Page 37: MEAN Stack Warm-up

Componentimport {Component, OnInit} from 'angular2/core'import {QuizService} from './quiz-service'@Component({ selector: 'quiz', templateUrl: './templates/quiz.html', providers: [QuizService]}) export class QuizComponent implements OnInit { quizList: IQuizList[]; constructor(private _quizService:QuizService) { } ngOnInit() { this.getQuiz(); } getQuiz() { this.quizList = this._quizService.getQuizzes(); } }

Page 38: MEAN Stack Warm-up

Template/View

• Is a way to describe a view using HTML

• Templates can be included with the component

• Or as a URL link to an HTML file

• Best practice is to use an HTML file

Page 39: MEAN Stack Warm-up

Data Binding

C/D Attribute Binding type

—> {{ value }} one-way

—> [property] = “value” property

<— (event) = “handler” event

<—> [(ng-model)] = “property” two-way

Page 40: MEAN Stack Warm-up

Service

• “Substitutable objects that are wired together using dependency injection (DI)”

• Used to share code across an app

• Lazily instantiated

• Angular has no “Service” defined type

Page 41: MEAN Stack Warm-up

Directive• A class with directive metadata

• Two kinds: attribute & structural

• Attribute directives alter the look or behavior of an existing element

• Structural directives alter the layout by adding, removing, and replacing elements in the DOM

• A component is a directive with a view

Page 42: MEAN Stack Warm-up

Directiveimport {Directive, ElementRef, Renderer, Input, OnInit} from 'angular2/core'; @Directive({ selector: '[sizer]'}) export class Sizer implements OnInit { @Input() sizer:string; element:ELementRef; renderer:Renderer; constructor(element:ElementRef, renderer:Renderer) { this.element = element; this.renderer = renderer; } ngOnInit() { this.renderer.setElementStyle(this.element.nativeElement, 'fontSize', this.sizer + '%'); } }

Page 43: MEAN Stack Warm-up

Component + Directiveimport {Directive, Component, ElementRef, Renderer} from ‘@angular/core'; import {Sizer} from './sizer'@Component({ selector: 'my-app', providers: [], template: ` <div> <p [sizer]="200">Butter{{name}}</p> </div> `, directives: [Sizer]}) export class App { constructor() { this.name = 'Monkey' } }

Page 44: MEAN Stack Warm-up

Dependency Injection• A way to supply a new instance of a class with the

fully-formed dependencies it needs

• Most dependencies are services

• Angular know which services a components by looking at the types of its constructor parameters

• Services are injected by an Injector which uses a Provider to create the service

Page 45: MEAN Stack Warm-up

Module

• Modules are optional but a best practice

• export tells TypeScript that the resource is a module available for other modules

• import tells TypeScript the resource in a module

• Angular ships a collection library modules

Page 46: MEAN Stack Warm-up

Links• https://www.mongodb.org/

• http://expressjs.com/

• https://angular.io/

• https://nodejs.org/

• http://mongoosejs.com/

• https://www.heroku.com/

Page 47: MEAN Stack Warm-up

Summary

• The MEAN Stack build web apps and APIs

• It is composed of four main components

• Allows development in JavaScript throughout