97
NODE PROGRAM 2014

Node Program 2

Embed Size (px)

DESCRIPTION

NodeJs Program 2

Citation preview

Page 1: Node Program 2

NODEPROGRAM2014

Page 2: Node Program 2

PRESENTERAzatMardan:

USFederalgovernmentStartups(Storify)Corporations(DocuSign)9booksonNode

@azat_cowebapplog.com

Page 3: Node Program 2

AGENDADAY11. Introductions2. JavaScriptFundamentals3. Break4. Node.jsFundamentals5. Debuggingandothertools6. NPM:utils,fs,buffer,url,path7. LearnYouNodeWorkshop8. Lunch9. HelloWorldServer10. Heroku11. StreamAdventureWorkshop12. FunctionalJavaScriptWorkshop

Page 4: Node Program 2

AGENDADAY21. NoSQLandMongoDB2. RESTAPI3. Break4. Express.jsFundamentals5. JadeandStylus6. ExpressRESTAPI7. ExpressWorksWorkshop8. Lunch9. Production10. Electivepersonalprojects

Page 5: Node Program 2

JAVASCRIPTFUNDAMENTALS

Page 6: Node Program 2

EXPRESSIVNESS

Page 7: Node Program 2

LOOSETYPINGstringbooleannumberregexpobject

Page 8: Node Program 2

OBJECTLITERALNOTATIONvarobj={a:4,b:9,x:"node.js"}

Page 9: Node Program 2

FUNCTIONS

varf=function(){...}

functionf2(){...}

functionf3(){...return"ok"}

Page 10: Node Program 2

ARRAYSvararr=[1,2,3]arr[0]//==1

Page 11: Node Program 2

PROTOTYPALNATUREPseudo-classical(new,Object,prototype)Functionalinheritancepattern

Page 12: Node Program 2

FUNCTIONALINHERITANCEvarvehicle=function(name){return{name:name,speed:0,accelerate:function(speedIncrease){this.speed+=speedIncreaseconsole.log(this)}}}

varcar1=vehicle('toyota')car1.accelerate(10)console.log(car1.name+'isgoingat'+car1.speed)

Page 13: Node Program 2

CONVENTIONSNamesIndentationSemi-colonsComma-firststyle

Page 14: Node Program 2

NOMODULES

Page 15: Node Program 2

CLOSURES

Page 16: Node Program 2

GLOBALANDPRIVATEVARS

Page 17: Node Program 2

IMMEDIATELY-INVOKEDFUNCTIONEXPRESSIONS

;(function(){...}())

Page 18: Node Program 2

KEYWORD"THIS"

Page 19: Node Program 2

PITFALLSLeakingvarsintoglobalspaceUsingwrong"this"contextUsingwrong==or===MissingbreakinaswitchcaseNotusing"return"whenneededDealingwithpseudo-classicalinheritance

Page 20: Node Program 2

EXERCISEWritea"class"bookwithfunctionalinheritancepattern:

TakesthenameoptionHasamethodreadthattakesnumberofpagesRemembersthenumberofthelastpageread

Page 21: Node Program 2

ANSWERvarbook=function(name){return{name:name,lastPageRead:1,read:function(pages){this.lastPageRead+=pages}}}

varpracticalNode=book('PracticalNode.js')practicalNode.read(101)console.log('lastpagereadfor'+practicalNode.name+'is'+practicalNode.lastPageRead)

Page 22: Node Program 2

NODE.JSFUNDAMENTALS

Page 23: Node Program 2

EVENTLOOPconsole.log('a')setTimeout(function(){console.log('b')},200)console.log('c')

Page 24: Node Program 2

NONBLOCKINGI/OGoogleChromeV8withC++andJS/ECMASuperefficient!CanbeblockedbysynccodeCanbeblockedbylotsofcomputations

Page 25: Node Program 2

READ-EVAL-PRINTLOOP(a.k.a.Console)inNode.js

$node-v$node>

Page 26: Node Program 2

LAUNCHINGNODE.JSSCRIPTS$nodeprogram.js$nodescript.js$node-e"console.log('helloworld')"

Page 27: Node Program 2

NODE.JSPROCESSINFORMATION$node-e"console.log(process)"

process.argvprocess.envprocess.pid

Page 28: Node Program 2

ACCESSINGGLOBALSCOPEINNODE.JSglobal

Page 29: Node Program 2

Never:

IMPORTINGANDEXPORTINGMODULESImport:

varfs=require('fs')varexpress=require('express')

Export:module.exports={...}module.exports=function(){...}exports.a=function(){}

exports=...

Page 30: Node Program 2

BUFFERBufferisaNode.jsbinarydatatype

Page 31: Node Program 2

__DIRNAMEVS.PROCESS.CWDvarpath=__dirname+fileNameconsole.log(process.cwd)

Page 32: Node Program 2

EXERCISE

Writetwofiles:

1. amodule2. aprogramthatexecutesamethodfromthatmodule

Page 33: Node Program 2

Program:

ANSWERModule(module.js):

exports.f=function(arr,num){returnarr.slice(num)}

varmodule=require('./module')vararr=[1,2,3]console.log(module.f(arr,2))//[3]

Page 34: Node Program 2

COREMODULESnoneedtoinstallwithNPM

Page 35: Node Program 2

NET

Page 36: Node Program 2

HTTP

Page 37: Node Program 2

PATH

Page 38: Node Program 2

FS

Page 39: Node Program 2

URL

Page 40: Node Program 2

STRINGDECODER

Page 41: Node Program 2

CRYPTO

Page 42: Node Program 2

DEBUGGINGANDOTHERTOOLSNodeInspectorWebStormnodemon/supervisor/forever/node-devForemanhttp-server/node-static(static)SublimeText2anditsplugins

Page 43: Node Program 2

NPM

Page 44: Node Program 2

[email protected]$npminstallexpress--save$npminstallexpress--save-dev

Page 45: Node Program 2

PACKAGE.JSON{"name":"stream-adventure","version":"2.5.0","description":"aneducationalstreamadventure","bin":{"stream-adventure":"bin/cmd.js"},"dependencies":{"hyperquest":"~0.1.6","ws":"~0.4.25"},"devDependencies":{"tape":"~2.3.0"}}

Page 46: Node Program 2

NODE_MODULES

Page 47: Node Program 2

NPMINSTALL-G

Page 48: Node Program 2

YOULEARNNODE$sudonpminstall-glearnyounode

Page 49: Node Program 2

WORKSHOPTIME

Page 50: Node Program 2

HELLOWORLDSERVER(localsetup)

Page 51: Node Program 2

TUTORIAL&CODE

6.1Node.jsinRapidPrototypingwithJSonpage139inprintand153inPDF.

Page 52: Node Program 2

HELLOWORLDSERVER(Herokudeployment)

Page 53: Node Program 2

NECESSARYCOMPONENTShttps://toolbelt.heroku.comSSHkeysSSHtoHerokuProcfile(web:nodeserver.js)package.json(npminit)

Page 54: Node Program 2

STEPSBRIEFLY1. Makeitworklocally2. AddProcfile,package.json3. $gitinit/add/gitcommit4. $herokucreate5. $gitpush...

Page 55: Node Program 2

TUTORIAL&CODE

6.1.4Deploying"HelloWorld"toPaaSinRapidPrototypingwithJSonpage139in

printand158inPDF.

Page 56: Node Program 2

STREAM

Page 57: Node Program 2

STREAMADVENTURE$sudonpminstall-gstream-adventure$stream-adventure

Page 58: Node Program 2

WORKSHOPTIME

Page 59: Node Program 2

FUNCTIONALJAVASCRIPT$sudonpminstall-gfunctional-javascript-workshop$functional-javascript-workshop

Page 60: Node Program 2

WORKSHOPTIME!

Page 61: Node Program 2

CHAT(run-timememorystore)

Page 62: Node Program 2

TUTORIALS&CODE

6.2Chat:Run-TimeMemoryVersioninRapidPrototypingwithJSonpages146inprint,and159inPDF.

Sourcecode:http://bit.ly/1usviBi

Page 63: Node Program 2

ENDPOINTSPOST/messages.jsonGET/messages.json

Page 64: Node Program 2

FILEStest.js:unittestsmb-server.js:server

Page 65: Node Program 2

MB-SERVER.JSPOST/messages/create.jsonGET/messages/list.json

util.inspectquerystring.parse

exports.getMessagesexports.addMessage

Page 66: Node Program 2

CURL$curlhttp://127.0.0.1:1337$curl-XPOST-d'name=azat&message=hi'http://127.0.0.1:1337

Page 67: Node Program 2

NODESCHOOLhttp://nodeschool.io

Page 68: Node Program 2

DAY2

Page 69: Node Program 2

AGENDADAY2Front-endandback-endoverviewNoSQLandMongoDBRESTAPIBreakExpress.jsFundamentalsJadeandStylusExpressRESTAPIExpressWorksWorkshopLunchProductionElectivepersonalprojects

Page 70: Node Program 2

FRONT-ENDANDBACK-ENDTraditionalwebThickclient/XHRweb

Page 71: Node Program 2

MONGODBBASICSNorelationaldataFast,scalable,andeasilydistributedUsesJavaScriptandBSON(~JSON)!!!

Commands:

Tools:webapplog.com/mongoui

$mongod$mongo

Page 72: Node Program 2

MONGOSHELL>usedbname>showcollections>db.local.find()>db.local.insert({a:1})

Mainmethods:>db.local.find({...})>db.local.insert({...})>db.local.save({...})>db.local.remove({_id:...})>db.local.update({_id:...})

Page 73: Node Program 2

EXERCISE1. StartMongoDBserver2. Createanobjectinacollectionusingshell3. Downloadmongouiandfindyourobject4. Updateyourobject,checkthechanges

Page 74: Node Program 2

NOSQLANDMONGODBPage168inRapidPrototypingwithJS(PDF)

Page154inprint6.4MongoDB

Page 75: Node Program 2

CHATRESTAPI(dbstore)

Page 76: Node Program 2

MONGOHQvaruri=process.env.MONGOHQ_URL||'mongodb://@127.0.0.1:27017'

$herokuaddons:addmongohq:sandbox

Page 77: Node Program 2

MONGODBLIBRARYhttps://github.com/mongodb/node-mongodb-native

Alternatives:MongoskinMongooseMonkMagnolia

Page 78: Node Program 2

TUTORIALS&CODE6.5Chat:MongoDBVersionpage176inPDFand158inprint

http://bit.ly/1AkobeN

Page 79: Node Program 2

EXPRESS.JSFUNDAMENTALS

Page 80: Node Program 2

APPSTRUCTURE

1. Includes2. Instantiations3. Configurations4. Middleware5. Routes6. Boot-up

Page 81: Node Program 2

MIDDLEWAREAlmostalwaysuse:staticbody-parserexpress-sessioncompressionallfromcheatsheet*

*http://bit.ly/Us2qbP

Page 82: Node Program 2

EXPRESS.JSSTACKJadeStylusMongooseorMongoskin

Page 83: Node Program 2

GENERATOR

$npminstall-gexpress-generator

Page 84: Node Program 2

OTHERFRAMEWORKSHapiSailsDerby

manyothersathttp://nodeframeworks.com

Page 85: Node Program 2

EXPRESS.JSHELLOWORLD

Page 86: Node Program 2

CHATRESTAPISERVER(Express.js)

Page 87: Node Program 2

INSPIRATIONCode:https://github.com/azat-co/rest-api-express

Description:http://bit.ly/1jy30tn

Page 88: Node Program 2

JADEANDSTYLUS

Page 89: Node Program 2

EXPRESSWORKSWORKSHOP

Page 90: Node Program 2

PRODUCTION

Page 91: Node Program 2

NODE.JSSTACKHerokuAWSwithNginx+VarnishCache+UpstartscriptsMongoDBorMongoHQ/MongoLab:Mongoskin,MongooseLoggingwithWinston,ElasticKibanaorPapartrailapp

Page 92: Node Program 2

TIPSDeploymentscriptswithSalt(saltstack.com)IncreaseMaxSocketsLockversionsDon'ttrustuserinputHavegooderrorhandlinginplaceUseupstartorforever

Page 93: Node Program 2

ELECTIVEPERSONALPROJECTSFull-stack*IntegrationDeployment

*Comeupwithanidea,e.g.,todoapp

Page 94: Node Program 2

FULL-STACKWriteanfront-endapplicationforChat(ordownloadBackbone.jsversionfromhttps://github.com/azat-co/rpjs/tree/master/board).

MakeitworkwithyourRESTAPIChatserver.

Page 95: Node Program 2

INTEGRATIONWriteanOAuth1.0serverthatcansigninwithTwitter(or

anotherprovider).

YoucanuseOAuth1.0SigninwithEveryauthfromIntroductiontoOAuthwithNode.js

Page 96: Node Program 2

DEPLOYMENT

DeployNode.jsapplication(HelloWorld)toAWS

Page 97: Node Program 2

ENDIfit'snotfun,it'snotJavaScript!

@azat_co