Node.js workshop



Node.js workshop

0 0


node-workshop

Node.js workshop - Presentation och exempel

On Github dermike / node-workshop

Node.js workshop

  • Node som server
  • Node i kommandotolken
  • Node på hårdvara

Vad är Node.js?

  • Server-side javascript
  • Bygger på Google's V8-motor
  • Eventbaserat och asynkront
  • Realtid med streams och websockets

LAMP vs MEAN

  • M: MongoDB (No-SQL) istället för MySQL
  • E: ExpressJS (ramverk för Node) istället för Apache
  • A: AngularJS (för klientsidan)
  • N: NodeJS (ej bundet till Linux)

Allt är javascript/JSON

Modul-systemet i Node.js

  • Moduler är A och O
  • Kapslar in funktionalitet och gör koden mer lätthanterlig
  • Interna moduler, del av Node's API:
    • fs, http
  • Externa javascript-moduler (kan ha C++ add-ons):
    • express, underscore, jade, request
  • Det mesta finns färdigt via npm

CommonJS

  • Specifikation för beroendehantering i javascript.
  • Använder require för att importera.
						var jsFile = require('./relative/path/file.js');
					

require

var jsFile = require('./relative/path/file.js');
var jsonFile = require('./relative/path/file.json');

// använder först file.js och sedan file.json
var someFile = require('./relative/path/file');

// letar först efter main i package.json
// annars index.js eller index.json
var someDir = require('./relative/path');

// letar efter core-modul med namn bajs
// sedan i ./node_modules/bajs
// sedan ../node_modules/bajs
// o s v
var bajs = require('bajs');
					

He's an importer exporter, okay?

module.exports

module.exports = "Hej hej från en sträng!";
// exporterar en literal

module.exports = function() { };
// exporterar en funktion

module.exports = {'key': 'value'};
// exporterar ett objekt
					

npm

  • Node package manager
  • Verktyg för att installera moduler/beroenden och köra tester
{
  "name": "best-practices",
  "description": "A package using versioning best-practices",
  "author": "Art Vandelay <art@vandelay.com>",
  "dependencies": {
    "colors": "0.x.x",
    "express": "2.3.x",
    "optimist": "0.2.x"
  },
  "devDependencies": {
    "vows": "0.5.x"
  },
  "engine": "node >= 0.4.1"
}
					

package.json

Använda npm och package.json

$ npm init

$ npm install pkg [--save, --save-dev, -g]

$ npm uninstall pkg [--save]

$ npm prune

$ npm ls

$ npm update pkg
					

git clone https://github.com/dermike/node-workshop.git

cd exempel/exempel1

Node som server, ett exempel

Starta med node index.js

var http = require('http');

http.createServer(function (req, res) {
  console.log('Request inkommet!');
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World!');
}).listen(1337, '127.0.0.1');

console.log('Server startad...');
					

Node som server, övning

Skriv om exemplet i modulform. Utgå ifrån ovning.js

Kom ihåg module.exports...

Lösning

var http = require('http');

module.exports.start = function() {
  http.createServer(function (req, res) {
    console.log('Request inkommet!');
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World!');
  }).listen(1337, '127.0.0.1');

  console.log('Server startad...');
};
					

Övning: Chatt med express och socket.io

cd exempel/exempel2

Skapa package.json med npm init Ladda ner de moduler som behövs i index.js och spara som dependencies Starta Chatt-appen med node index.js och gå till localhost:1337 i webbläsare Utforska koden i index.js och under public/

Node i kommandotolken

  • #!/usr/bin/env node
  • chmod +x
  • npm install -g
"bin": {
  "mesh": "mesh.js"
}
    				

Node i kommandotolken, exempel

cd exempel/exempel3

Installera dependencies med npm install chmod +x mesh.js Sök i Svensk MeSH med ./mesh.js sökord Valfri övning: modifiera exemplet så det går att visa förklaring såhär: ./mesh.js sökord --visa

Node i kommandotolken, webbutveckling

Node i kommandotolken, webbutveckling

Bower - A package manager for the web

Hantera frameworks, libraries, assets, utilities

{
  "name": "ReferenceGuide",
  "version": "1.0.0",
  "homepage": "https://github.com/dermike/ReferenceGuide",
  "authors": [
    "Mikael Jergefelt <mike@redvolume.com>"
  ],
  "license": "MIT",
  "private": true,
  "dependencies": {
    "bootstrap": "3.2.0"
  }
}
    				

bower.json

Node i kommandotolken, webbutveckling

Gulp.js - the streaming build system

Plugins för att minifiera, konkatenera, strippa, modifiera m m

var gulp = require('gulp');
var uncss = require('gulp-uncss'), concatCss = require('gulp-concat-css'), concat = require('gulp-concat'), uglify = require('gulp-uglify'), minifycss = require('gulp-minify-css');

gulp.task('css', function() {
  gulp.src(['bower_components/bootstrap/dist/css/bootstrap.css', 'css/custom.css'])
    .pipe(uncss({
      html: ['test.html'], // Saved from full copy of DOM
      ignore: ['.collapsing', '.collapse.in', '.spacing']
    }))
    .pipe(concatCss("bundle.css"))
    .pipe(minifycss())
    .pipe(gulp.dest('./css'));
});

gulp.task('scripts', function() {
  gulp.src(['bower_components/jquery/dist/jquery.js',
            'bower_components/bootstrap/js/transition.js',
            'bower_components/bootstrap/js/collapse.js',
            'js/main.js'])
    .pipe(uglify())
    .pipe(concat('all.js'))
    .pipe(gulp.dest('./js'))
});

gulp.task('default', ['css', 'scripts']);
    				

Node på hårdvara

Tessel - Hardware development for software developers

Node på hårdvara

Johnny-Five - JavaScript Arduino programming framework

Node på hårdvara

Cylon.js - JavaScript robotics framework with support for 27 different platforms

Node på hårdvara, Tessel-demo

Ambient sensor (ljud och ljus)

"Clap to turn on the TV (paired with infrared) or know from a webapp if the lights are on at home."

var tessel = require('tessel');
var ambientlib = require('ambient-attx4');

var ambient = ambientlib.use(tessel.port['A']);

ambient.on('ready', function () {
 // Get points of light and sound data.
  setInterval( function () {
    ambient.getLightLevel( function(err, ldata) {
      if (err) throw err;
      ambient.getSoundLevel( function(err, sdata) {
        if (err) throw err;
        console.log("Light level:", ldata.toFixed(8), " ", "Sound Level:", sdata.toFixed(8));
    });
  })}, 500); // The readings will happen every .5 seconds unless the trigger is hit