Příklady pro Node.js 00-05

Zápisník experimentátora

Hierarchy: Node.js

Toto jsou komentované příklady pro Node.js. Zdrojové texty najdete na stránce https://github.com/RoboUlbricht/Node.js-tests. V tomto prvním balíku najdete to nejjednodušší, co se jen dá. Příklady slouží k seznámení se s programem.

00-hello-world

Vypsání textu na konzoli. Po spuštění programu se na konzoli objeví text Hello World!. Vypisování textu na konzoli se používá u programů v příkazovém řádku. Pomocí výpisů se dozvíte, co váš program udělal.

Instalace a spuštění.

node hello.js

Zdrojový kód má jen dva řádky. První řádek si vynutí používání proměnných v striktním režimu. To znamená, že nemůžete omylem definovat nějakou proměnnou s překlepem v názvu a pak se divit, proč to vlastně nefunguje. Současně je to i způsob, jakým donutit javascriptový interpreter k optimalizovanému výkonu. Zvykněte si toto vždy zapnout v prvním řádku programu a ušetříte si kupu zbytečně ztracených hodin při hledání chyb. Druhý řádek je samotný výpis na konzoli příkazového řádku.

"use strict";
console.log("Hello World!");

01-hello-world-http

Vypsání textu do okna prohlížeče. Port je 3000. Například napište adresuhttp://127.0.0.1:3000/ do svého prohlížeče. Toto je nejjednodušší možný server. Na každý požadavek odpoví stejně. V takové podobě to možná postrádá smysl, ale HTTP server je základem obrovského množství aplikací na Internetu. V pozdějších příkladech najdete HTTP server, který je vytvářen pomocí balíčku express.

Instalace a spuštění.

npm install
node index.js

Řádek s funkcí require ukazuje, jak se do vašeho kódu přidávají balíčky. Řádek s funkcí createServer vytvoří samotný HTTP server na portu 3000. Jako parametr funkce je další funkce, která bude provádět kód, který odpovídá na požadavky. Vývoj v JavaScriptu pro Node.js používá tento koncept. Skoro všude budete používat takovéto callback funkce. Poslední řádek je již známý výpis na konzoli příkazového řádku.

"use strict";

var http = require("http");

http.createServer(function (request, response) {

   // Send the HTTP header
   // HTTP Status: 200 : OK
   // Content Type: text/plain
   response.writeHead(200, {'Content-Type': 'text/plain'});
  
   // Send the response body as "Hello World"
   response.end('Hello World\n');
}).listen(3000);

// Console will print the message
console.log('Server running at http://127.0.0.1:3000/');

02-hello-world-express

Vypsání textu do okna prohlížeče. Port je 3000. Například napište adresuhttp://127.0.0.1:3000 do svého prohlížeče. Tento HTTP server je vytvořen pomocí balíčku express. To je obecně oblíbený balíček pro tyto účely. Vůči jednoduchému HTTP serveru na první pohled není vidět skoro žádné změny. To platí ale pouze v případě jednoduchých serverů. Jakmile se váš projekt začne rozrůstat a budete dodávat do prohlížeče větší množství různých stránek, v expressu se to bude stále dělat jednoduše a přehledně.

Instalace a spuštění.

npm install
node hello.js

Řádek s funkcí require přidá balíček express. Řádek s funkcí get ukazuje, jak se zpracovávají požadavky typu GET. Pokud byste potřebovali přidat více stránek, tak jen popridávate příslušné adresy a server sám provede zbytek.

'use strict';

var express = require('express')
var app = express()

app.get('/', function (req, res) {
  res.send('Hello World!\n')
})

var server = app.listen(3000, function () {
  var host = server.address().address;
  var port = server.address().port;

  console.log('Example app listening at http://%s:%s', host, port);
})

03-express-static

Vypsání textu do okna prohlížeče. Port je 3000. Například napište adresuhttp://127.0.0.1:3000/static/abc.txt do svého prohlížeče. V tomto příkladu jsem rozšířil předchozí příklad o statické stránky. Takových stránek budete do prohlížeče dodávat mnoho, protože takto například budete mít uložené kaskádové styly, obrázky a javascripty, které mají být použity v okně prohlížeče. To vše jsou statické stránky a není důvod abyste na jejich odesílání museli něco programovat. Express to odešle za vás.

Instalace a spuštění.

npm install
node static.js

Vůči předchozímu příkladu je pouze jediný řádek navíc. Řádek s funkcí use říká, že všechny adresy /static/cosi mají být dodány z vašeho lokálního adresáře public.

'use strict';

var express = require('express')
var app = express()
var path = require("path")

app.use('/static', express.static(path.join(__dirname, 'public')))

app.get('/', function (req, res) {
  res.send('Hello World!\n')
})

var server = app.listen(3000, function () {
  var host = server.address().address;
  var port = server.address().port;

  console.log('Example app listening at http://%s:%s', host, port);
})

04-express-base

HTTP server, který vrací odpověď v podobě HTML stránek. Port je 3000. Například napište adresu​ http://127.0.0.1:3000/ do svého prohlížeče. Tento příklad jsem si nechal vygenerovat pomocí Express generátoru. Aby se dal používat, je třeba nainstalovat balíček globálně pomocí příkazu npm install -g express-generator. Potom jsem aplikaci vygeneroval příkazem express --view=pug 04-express-base. Vygeneruje se poměrně hodně souborů, které tvoří kostru aplikace. Do adresáře public si můžete ukládat statické soubory. Do adresáře routes dáváte javascriptové zpracování požadavků na jednotlivé stránky. Do adresáře views dáváte šablony jednotlivých stránek. V tomto případě se jedná o šablony PUG.

Instalace a spuštění.

npm install
npm start

Pro spuštění aplikace se vytvořily dva soubory. První je ./bin/www, což je vytvoření HTTP serveru pomocí express. Druhým je ./app.js, kde je nastavení vaší aplikace. Pro nás jsou podstatné řádky s funkcemi require, které jsou nasměrovány do adresáře ./routes.

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var index = require('./routes/index');
var users = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', index);
app.use('/users', users);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

Takto se například vytvoří stránka /users v souboru ./routes/users.js.

var express = require('express');
var router = express.Router();

/* GET users listing. */
router.get('/', function(req, res, next) {
  res.render('users', {
   title: 'Express Arduino Slovakia Users',
   users: ['Milan', 'Peter', 'Erik']
  });
});

module.exports = router;

A takto vypadá šablona pro PUG v souboru ./views/users.pug.

extends layout

block content
  h1= title
  p Zoznam užívateľov.
  ul
    each val in users
      li= val

05-express-json

HTTP server, který vrací odpověď v podobě JSON. Port je 3000. Například napište adresu http://127.0.0.1:3000/ do svého prohlížeče. Poslední příklad jsem vytvořil stejně jako předchozí. Přidal jsem do něj jen vytvoření stránky ve formátu JSON, protože takovým stránkám se budu dost věnovat v dalších příkladech.

Instalace a spuštění.

npm install
npm start

Příklad zpracování požadavku v souboru ./routes/json.js.

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.json({ title: 'Arduino Slovakia JSON', hodnota: 25 });
});

module.exports = router;

09.07.2017


Menu