Príklady pre Node.js 00-05

Zápisník experimentátora

Hierarchy: Node.js

Toto sú komentované príklady pre Node.js. Zdrojové texty nájdete na stránke https://github.com/RoboUlbricht/Node.js-tests. V tomto prvom balíku nájdete to najjednoduchšie, čo sa len dá. Príklady slúžia na oboznámenie sa s programom.

00-hello-world

Vypísanie textu na konzolu. Po spustení programu sa na konzole objaví text Hello World!. Vypisovanie textu na konzolu sa používa pri programoch v príkazovom riadku. Pomocou výpisov sa dozviete, čo váš program urobil.

Inštalácia a spustenie.

node hello.js

Zdrojový kód má len dva riadky. Prvý riadok si vynúti používanie premenných v striktnom režime. To znamená, že nemôžete omylom definovať nejakú premennú s preklepom v názve a potom sa čudovať, prečo to vlastne nefunguje. Súčasne je to aj spôsob, akým donútiť javascriptový interpreter k optimalizovanému výkonu. Zvyknite si toto vždy zapnúť v prvom riadku programu a ušetríte si kupu zbytočne stratených hodín pri hľadaní chýb. Druhý riadok je samotný výpis na konzolu príkazového riadku.

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

01-hello-world-http

Vypísanie textu do okna prehliadača. Port je 3000. Napríklad napíšte adresu http://127.0.0.1:3000/ do svojho prehliadača. Toto je najjednoduchší možný server. Na každú požiadavku odpovie rovnako. V takejto podobe to možno postráda zmysel, ale HTTP server je základom obrovského množstva aplikácií na Internete. V neskorších príkladoch nájdete HTTP server, ktorý je vytváraný pomocou balíčka express.

Inštalácia a spustenie.

npm install
node index.js

Riadok s funkciou require ukazuje, ako sa do vášho kódu pridávajú balíčky. Riadok s funkciou createServer vytvorí samotný HTTP server na porte 3000. Ako parameter funkcie je ďalšia funkcia, ktorá bude vykonávať kód, ktorý odpovedá na požiadavky. Vývoj v javascripte pre Node.js používa tento koncept. Skoro všade budete používať takéto callback funkcie. Posledný riadok je už známy výpis na konzolu príkazového riadku.

"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

Vypísanie textu do okna prehliadača. Port je 3000. Napríklad napíšte adresu http://127.0.0.1:3000 do svojho prehliadača. Tento HTTP server je vytvorený pomocou balíčka express. To je všeobecne obľúbený balíček na takéto účely. Voči jednoduchému HTTP serveru na prvý pohľad nevidno skoro žiadne zmeny. To platí ale len v prípade jednoduchých serverov. Akonáhle sa váš projekt začne rozrastať a budete dodávať do prehliadača väčšie množstvo rôznych stránok, v expresse sa to bude stále robiť jednoducho a prehľadne.

Inštalácia a spustenie.

npm install
node hello.js

Riadok s funkciou require pridá balíček express. Riadok s funkciou get ukazuje, ako sa spracúvajú požiadavky typu GET. Ak by ste potrebovali pridať viac stránok, tak len popridávate príslušné adresy a server sám vykoná zvyšok.

'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

Vypísanie textu do okna prehliadača. Port je 3000. Napríklad napíšte adresu http://127.0.0.1:3000/static/abc.txt do svojho prehliadača. V tomto príklade som rozšíril predchádzajúci príklad o statické stránky. Takých stránok budete do prehliadača dodávať veľa, pretože takto napríklad budete mať uložené kaskádové štýly, obrázky a javascripty, ktoré sa majú použiť v okne prehliadača. To všetko sú statické stránky a nie je dôvod aby ste na ich odosielanie museli niečo programovať. Express to odošle za vás.

Inštalácia a spustenie.

npm install
node static.js

Voči predchádzajúcemu príkladu je iba jediný riadok naviac. Riadok s funkciou use hovorí, že všetky adresy /static/čosi sa majú dodať z vášho lokálneho adresára 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, ktorý vracia odpoveď v podobe HTML stránok. Port je 3000. Napríklad napíšte adresu http://127.0.0.1:3000/ do svojho prehliadača. Tento príklad som si nechal vygenerovať pomocou Express generátora. Aby sa dal používať, je potrebné nainštalovať balíček globálne pomocou príkazu npm install -g express-generator. Potom som aplikáciu vygeneroval príkazom express --view=pug 04-express-base. Vygeneruje sa pomerne veľa súborov, ktoré tvoria kostru aplikácie. Do adresára public si môžete ukladať statické súbory. Do adresára routes dávate javascriptové spracovanie požiadaviek na jednotlivé stránky. Do adresára views dávate šablóny jednotlivých stránok. V tomto prípade sa jedná o šablóny PUG.

Inštalácia a spustenie.

npm install
npm start

Na spustenie vašej aplikácie sa vytvorili dva súbory. Prvý je ./bin/www, čo je vytvorenie HTTP servera pomocou express. Druhým je ./app.js, kde je nastavenie vašej aplikácie. Pre nás sú podstatné riadky s funkciami require, ktoré sú nasmerované do adresára ./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 sa napríklad vytvorí stránka /users v súbore ./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 vyzerá šablóna pre PUG v súbore ./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, ktorý vracia odpoveď v podobe JSON. Port je 3000. Napríklad napíšte adresu http://127.0.0.1:3000/ do svojho prehliadača. Posledný príklad som vytvoril rovnako ako predchádzajúci. Pridal som do neho len vytvorenie stránky vo formáte JSON, pretože takýmto stránkam sa budem dosť venovať v ďalších príkladoch.

Inštalácia a spustenie.

npm install
npm start

Príklad spracovania požiadavky v súbore ./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;

18.05.2017


Menu