node.js workshop- node.js basics

24
node.js basics Qiong Wu gfnork webentwicklungsunternehmen first steps, modules, npm, Events

description

 

Transcript of node.js workshop- node.js basics

Page 1: node.js workshop- node.js basics

node.js basics

Qiong Wugfnork webentwicklungsunternehmen

first steps, modules, npm, Events

Page 2: node.js workshop- node.js basics

2

development for the webtraditional desktop applications have a user interface wired up with background logicuser interfaces are based on Windows Forms, Jswing, WPF, Gtk, Qt, etc. and dependant on operating systemon the web user interfaces are standardizedHTML for markupCSS for styleJavaScript for dynamic contentIn the past proprietary technologies existed on the web, e.g. Adobe Flash, ActiveXThey are slowly dying

Page 3: node.js workshop- node.js basics

3

development for the webData is generated on the server, transferred to the client and displayed by the browserServer Side technologies include PHP, JSP, ASP.net, Rails, Djanog, and yes, also node.js

Page 4: node.js workshop- node.js basics

4

node.js – what is it?JavaScript is well known for client-side scripts running inside the browsernode.js is JavaScript running on the server-sideSSJS -> Server-Side JavaScript

Use a language you knowUse the same language for client side and server side

There are a couple of other SSJS systems, e.g. RingoJS, Narwahl, Wakanda, Netscape Enterprise Server (1994)Powered by Google V8 runtimeFast, extendable and scalable

It’s NOT a web framework, and it’s also NOT a language

Page 5: node.js workshop- node.js basics

5

A little theoryThe idea behind node.js

perform asynchronous processing on single thread instead of classical multithread processing, minimize overhead & latency, maximize scalabilityScale horizontally instead of vertically (get more servers instead of more powerful ones) which is consistent with today’s trend towards cloud technologyIdeal for applications that serve a lot of requests but don’t use need lots of computational power per requestNot so ideal for heavy calculations, e.g. massive parallel computingAlso: Less problems with concurrency

Page 6: node.js workshop- node.js basics

6

A little theory

Diagram by Aaron Stannardhttp://www.aaronstannard.com/post/2011/12/14/Intro-to-NodeJS-for-NET-

Developers.aspx

Page 7: node.js workshop- node.js basics

7

A little theoryThere are a couple of implications of this apparently very simple and basic model

Avoid synchronous code at all costs because it blocks the event loopWhich means: callbacks, callbacks, and more callbacks

Page 8: node.js workshop- node.js basics

8

Running node.js Download from nodejs.org Install with Windows Installer apt-get install nodejs on Ubuntu

Try some commands on the interactive shell

node> console.log('Hello World');Hello World

Page 9: node.js workshop- node.js basics

9

Running node.js apart from interactive code shell interpretation, code can be read from

*.js files Let’s create a *.js file and run it with node

E.g. create app.js file Fill it with Code

Run it with

console.log('Hello World');

>node app.jsHello World

Write to node console

run *.js file by executing node *.js

from CLI

Page 10: node.js workshop- node.js basics

10

Webserver exampleThis is the node sample application shown on nodejs.org

and hosts a fully fledged HTTP server, already shows a lot of basic concepts of nodeJS

var http = require('http');

http.createServer(function (req, res) { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello World\n');}).listen(1337, '127.0.0.1');console.log('Server running at http://127.0.0.1:1337/');

Use require keyword to load a module

Call method to create a new HTTP server

write to response stream

define anonymous callback that handles

request event

start accepting connections on port

and hostnameapplication doesn’t exit after last line of codenode.js keeps running until no further events are

possible

Page 11: node.js workshop- node.js basics

11

Webserver exampleThis is the node sample application shown on nodejs.org

and hosts a fully fledged HTTP server, already shows a lot of basic concepts of nodeJS

var http = require('http');

http.createServer(function (req, res) { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello World\n');}).listen(1337, '127.0.0.1');console.log('Server running at http://127.0.0.1:1337/');

Use require keyword to load a module

Call method to create a new HTTP server

write to response stream

define anonymous callback that handles

request event

start accepting connections on port

and hostnameapplication doesn’t exit after last line of codenode.js keeps running until no further events are

possible

Page 12: node.js workshop- node.js basics

12

node.js modules developers know libraries, in node.js modules serve a similar function put different functionalities in different *.js files and allow usage from

other *.js files Helps structuring application

use exports keyword to expose functions to other modules use require keyword to import modules

Page 13: node.js workshop- node.js basics

13

node.js modules create a new file called test.js Expose function with exports keyword

import from main app.js file

exports.helloworld = function () { console.log('Hello World');}

var test = require('./test.js');test.helloworld();

assign helloworld property to exports

object

and assign function to helloworld property, thereby exposing the

function to other modules

require keyword retrieves exports

object defined above

call function stored in helloworld

Page 14: node.js workshop- node.js basics

14

node.js modules It is also possible to directly overwrite the exports object with

module.exports Usually this is done to export the constructor of a JavaScript ‘Class’

and split class definitions to separate filesmodule.exports = function () { this.name = "test object"; this.color = "red"; this.size = "large";}

var test = require('./test.js');var testObject = new test();console.log('name:' + testObject.name);console.log('color:' + testObject.color);console.log('size:' + testObject.size);

assign function to exports object

define JavaScript object constructor

require keyword retrieves exports

object defined above

function test() points to constructor defined

in module.exportscreate new object from constructor

Page 15: node.js workshop- node.js basics

15

node.js modules apart from self written modules, it is also possible to install modules

from a repository with a package manager This package manager is npm Similar command syntax to apt npm install <module name> npm update

huge amount of public packages (74.753 as of 24th May 2014) everyone can contribute

Page 16: node.js workshop- node.js basics

16

structure of a node.js applicationYou need a *.js file that serves as application entry pointRun it directly with node *.js

package.jsondescription of a node.js project in JSON formatSpecifies name, version, description, keywords for your projectdefines dependencies that your project is relying on

Page 17: node.js workshop- node.js basics

17

package.json

{ "name": "TestNodejsApp", "version": "0.0.0", "description": "TestNodejsApp", "private": true, "main": "app.js", "author": { "name": "Qiong Wu", "email": "" }, "dependencies": { "express": "3.4.4", "jade": "*", "stylus": "*" }}

define application entry point

flag project as private, npm refuses to publish

it

define all dependencies that are to be loaded from npm

* means use newest version

Page 18: node.js workshop- node.js basics

18

node.js specific javascript require – handles module management events – implements observer pattern streams – I/O

Page 19: node.js workshop- node.js basics

19

node.js eventsWe‘ve talked about callbacks, asynchronous programming & promisesnode.js is event based and implements the observer patternBasically a subject is defined that keeps track of its dependents called observers and tells them when any relevant state changes

In node.js the EventEmitter class is used to define objects that represent a source of events, usually by inheriting from EventEmitter

Page 20: node.js workshop- node.js basics

20

node.js eventsemitter.on

emitter.once

server.on('connection', function (stream) { console.log('someone connected!');});

server.once('connection', function (stream) { console.log('Ah, we have our first user!');});

Page 21: node.js workshop- node.js basics

21

node.js events

function Test(colour) { this.colour = colour; events.EventEmitter.call(this); this.sendEvent = function() { this.emit('EventSent'); }} Test.prototype.__proto__ = events.EventEmitter.prototype; var testObject = new Test('white'); testObject.on('EventSent', function() { console.log('Event received'); });testObject.sendEvent();

Call EventEmitter Constructor on object

Evoke all bound eventshandlers

Inherit Prototype fro EventEmitter

Page 22: node.js workshop- node.js basics

22

streamsPerform I/O with node.jsfor web applications response object is most common stream objectwritable

writable.writeThis method writes some data to the underlying system, and calls the supplied callback once the data has been fully handled.writeable.endCall this method when no more data will be written to the stream. If supplied, the callback is attached as a listener on the finish event.

Page 23: node.js workshop- node.js basics

23

streams

// write 'hello, ' and then end with 'world!'http.createServer(function (req, res) { res.write('hello, '); res.end('world!'); // writing more now is not allowed!});

Page 24: node.js workshop- node.js basics

24

Tools of the tradeIDEs for node.jsonline IDE like cloud9Eclipse with node.js pluginsVisual Studio node.js ToolkitJetbrains Webstormlots of other IDEs: webmatrix, coderunner, Expresso, Atom, etc.

We really like Jetbrains Webstorm & Visual Studio with node.js