ITV0110 node.js töö: erinevus redaktsioonide vahel

Allikas: Lambda
Mine navigeerimisribale Mine otsikasti
6. rida: 6. rida:
== Mis tuleb teha ==
== Mis tuleb teha ==


Sinu ülesandeks on node.js abil ehitada hästi lihtne wiki:
Sinu ülesandeks on node.js abil ehitada hästi lihtne wiki ehk süsteem veebilehe muutmiseks veebilehe enda kaudu:


* node.js kuvab staatilist html lehte, näiteks wiki.html, aga lisab sinna lehe lõppu ise alati vormi, kus on textarea väli ja "salvesta" nupp. Pane sinna wiki.html faili algul veidi teksti ja midagi: konkreetne sisu ei ole oluline.
* node.js kuvab staatilist html lehte, näiteks wiki.html, aga lisab sinna lehe lõppu ise alati vormi, kus on textarea väli ja "salvesta" nupp. Pane sinna wiki.html faili algul veidi teksti ja midagi: konkreetne sisu ei ole oluline.

Redaktsioon: 19. november 2015, kell 10:01

Töö eesmärk

Töö sisuline eesmärk on tutvuda javascripti kasutamisega serveri pool node.js-i süsteemi abil.

Mis tuleb teha

Sinu ülesandeks on node.js abil ehitada hästi lihtne wiki ehk süsteem veebilehe muutmiseks veebilehe enda kaudu:

  • node.js kuvab staatilist html lehte, näiteks wiki.html, aga lisab sinna lehe lõppu ise alati vormi, kus on textarea väli ja "salvesta" nupp. Pane sinna wiki.html faili algul veidi teksti ja midagi: konkreetne sisu ei ole oluline.
  • Kui sa textarea välja ära täidad ja "salvesta" nuppu vajutad, kirjutab node.js rakendus serveris wiki.html faili üle ja kuvab seejärel juba seda muudetud faili, pannes sinna lõppu jällegi vormi, textarea ja "salvesta" nupu.

Igasugused väikesed täiendused - näiteks textarea ja nupu css-ga peitmine, nii et kuvamiseks on vaja eraldi "redigeeri" nuppu vajutada, on ok ja soovitav, aga ei anna mingeid lisapunkte.

node.js sissejuhatust vaata kursuse põhilehel node.js peatükis.

node.js-i arenduse saad teha nii dijkstras kui ka üleni oma arvutis (installeeri endale node.js) või arvutiklassi arvutis (seal on ta olemas arvutiklassi standardpakettide hulgas, ei ole vaja olla admin). Lõpptulemusena tuleb rakendus igal juhul dijkstra-sse käima panna.

node.js Dijkstras

Dijkstras saad käivitada node.js-i nii:

nodejs &

Kus ampersand & ütleb opsüsteemile, et see programm tuleb käima jätta. ehk koos programmiga

nodejs myprog.js &

Vaata, kas nodejs server töötab:

ps

ja kui jah, siis sa näed midagi sellist:

  PID TTY          TIME CMD
29728 pts/2    00:00:00 bash
30162 pts/2    00:00:00 nodejs
30288 pts/2    00:00:00 ps

nodejs serveri peatamiseks ütle siis

kill 30162

kus 30162 on protsessi number PID, mida ps sulle nodejs kohta ütles.

Portidena, kust datat servereerida, saad kasutada vahemikku 7300-8000. NB! Kui mõni port on hetkel kellegi poolt juba kasutuses, siis teine programm seda samal ajal kasutada ei saa.

Näiteks selline nodejs-i programm töötab serveris ok: pane käima (vbl pead enne pordi muutma) ja ava http://dijkstra.cs.ttu.ee:7500/

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});  
  res.end('Hello World taneli poolt\n');
}).listen(7500, '193.40.252.80');
console.log('Server running at http://193.40.252.80/');

Nodejs staatiliste failide serveerijana

Kui tahad node.js-i abil lihtsalt veebiserverit teha, et näiteks oma css-i ja javascripti jne faile kuvada, siis kasuta seda näidet.

Näited

Järgnevas on väikesed node näited, mida sobib kasutada praksiga alustamiseks.

Kui oled nodejs oma arvutis käima saanud, käivita programmid käsurealt nii (dijkstras ütle node asemel nodejs, lisa lõppu ampersand ja pordid vali vahemikust 7300-8000):

node myprog.js

ja ava urlilt näiteks nii http://localhost:1337 või nii http://localhost:1337/suva/proov?b=c&d=f123555&a=456

Näited kuvavad debuginfot konsoolile ja näitavad tulemusi brauserisse.

Hello world:

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

Failist lugemine:

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  
  var fs = require('fs');
  var show="File contents:<p> "
  
  fs.readFile('katse.txt',"utf8", function (err, data) {
    if (err) {
      console.log(err);
      res.write("viga failist lugemisel");
      res.end();
      return;
    }
    console.log(data);
    show+=data;
    res.write(show);
    res.end();
  });  
  
  
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

Urli parsimine (katseta http://localhost:1337/suva/proov?b=c&d=f123555&a=456 )

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  
  var fs = require('fs');
  var url = require('url');   
    
  fs.readFile('katse.txt',"utf8", function (err, data) {
    if (err) {
      console.log(err);
      res.write("viga failist lugemisel");
      res.end();
      return;
    }
    var show="Url:<p> "
    var url_parts = url.parse(req.url, true);
    show+=JSON.stringify(url_parts);
    show+="<p>File contents:<p> "
    show+=data;
    res.write(show);
    res.end();
  });  
  
  
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

Faili kirjutamine:

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  
  var fs = require('fs');
  var url = require('url');   
    
  fs.readFile('katse.txt',"utf8", function (err, data) {
    if (err) {
      console.log(err);
      res.write("viga failist lugemisel");
      res.end();
      return;
    }
    var show="Url:<p> "
    var url_parts = url.parse(req.url, true);
    show+=JSON.stringify(url_parts);
    show+="<p>File contents:<p> "
    show+=data;
    var store="some text";
    fs.writeFile('store.txt',store, function (err) {
      if (err) {
        console.log(err);
        res.write("viga faili kirjutamisel");
        res.end();
        return;
      }
      res.write(show);
      res.end();
    });    
  });  
  
  
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

Kirjutatud failist lugemine ja ühe näiteparameeter a kuvamine ( katseta http://localhost:1337/suva/proov?b=c&d=f123555&a=456 )

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  
  var fs = require('fs');
  var url = require('url');   
    
  fs.readFile('katse.txt',"utf8", function (err, data) {
    if (err) {
      console.log(err);
      res.write("viga katsefailist lugemisel");
      res.end();
      return;
    }
    fs.readFile('store.txt',"utf8", function (err, storedata) {
      if (err) {
        console.log(err);
        res.write("viga storefailist lugemisel");
        res.end();
        return;
      }
      var show="Url:<p> "
      var url_parts = url.parse(req.url, true);
      show+=JSON.stringify(url_parts);
      show+="<p>Template file contents:<p> "
      show+=data;      
      show+="<p>Store file contents:<p> "
      show+=storedata;
      parsed_store=JSON.parse(storedata);
      if (parsed_store.a) {
        show+="<p>Store file param a value:<p> "
        show+=parsed_store.a;
      }
      var store=JSON.stringify(url_parts.query);
      show+="<p>Stored:</p>";
      show+=store;
      fs.writeFile('store.txt',store, function (err) {
        if (err) {
          console.log(err);
          res.write("viga faili kirjutamisel");
          res.end();
          return;
        }
        res.write(show);
        res.end();
      });    
    });  
  });  
  
  
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');