Nodejs

Ιστορία

Το Node.js δημιουργήθηκε από τον Ryan Dahl το 2009. Η δημιουργία και η συντήρηση του έργου χορηγήθηκε από την εταιρία Joyent. Η ιδέα για την ανάπτυξη του node προήλθε από την ανάγκη του Ryan Dahl να βρει τον πιο αποδοτικό τρόπο να ενημερώνει τον χρήστη σε πραγματικό χρόνο για την κατάσταση ενός αρχείου που ανέβαζε στο διαδίκτυο. Επίσης επηρεάστηκε από το Mongrel του Zed Shaw. Επιπροσθέτως μετά από αποτυχημένα έργα σε C, Lua, Haskell η κυκλοφορία της μηχανής V8 (V8 JavaScript Engine) της Google τον ώθησε να ασχοληθεί με την Javascript.

Χαρακτηριστικά

Το Νode χαρακτηρίζεται από την έμφαση στην ασύγχρονη επικοινωνία μεταξύ των υπολογιστικών πόρων. Αυτό επιτυγχάνεται με την χρήση συμβάντων (events) που προσφέρει η Javascript και ονομάζονται callbacks. Για παράδειγμα όταν ένας περιηγητής ιστού φορτώσει πλήρως ένα αρχείο, ένας χρήστης πατάει κάποιο κουμπί, ολοκληρώνεται ένα αίτημα AJAX, τα συμβάντα αυτά πυροδοτούν ένα συγκεκριμένο callback. Αυτό με την σειρά του επιτρέπει την ροή του κώδικα χωρίς να αφήνει ανενεργό τον επεξεργαστή προκειμένου να εκτελεστεί μια λειτουργία, όπως μια επιτυχής ανάγνωση αρχείου από τον δίσκο.

HTTP Server

Ένα χαρακτηριστικό παράδειγμα node για ένα απλό HTTP εξυπηρετητή είναι ο παρακάτω κώδικας
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/');
Ο κώδικας αυτός δημιουργεί έναν εξυπηρετητή ο οποίος τρέχει τοπικά στην θύρα "1337". Ο χρήστης μπορεί στην μπάρα του φυλλομετρητή του να γράψει την διεύθυνση url "http://127.0.0.1:1337/" και να του εμφανιστεί μια σελίδα με το "Hello World" σαν κείμενο. Για την εκτέλεση του παραπάνω προγράμματος απαιτείται η αποθήκευση του παραπάνω κώδικα σε ένα αρχείο (έστω my_basic_http_server.js) με την εντολή:
$ node my_basic_http_server.js
στην κονσόλα του συστήματος που χρησιμοποιεί.

Δημιουργία αρχείου

var fs = require('fs');fs.writeFile("D:\myfile.txt", "Hello World", function(err, data) {
    if (err) throw err;
    console.log(data);})
Ο παραπάνω κώδικας χρησιμοποιεί την έτοιμη βιβλιοθήκη του node για την επεξεργασία αρχείων με την εντολή "require([library_name])" και δημιουργεί ή αντικαθιστά στην περίπτωση που υπάρχει στο δίσκο D το αρχείο "myfile.txt" με περιεχόμενο "hello world". Όταν ολοκληρωθεί η λειτουργία αυτή της εγγραφής, πυροδοτείται το callback το οποίο ορίστηκε, και αυτό με την σειρά του είτε στέλνει ένα μήνυμα προβλήματος στην περίπτωση αποτυχίας, είτε στέλνει τα δεδομένα του αρχείου στην κονσόλα του χρήστη.

Πρόσθετα

Η κοινότητα έχει δημιουργήσει ένα ολόκληρο οικοσύστημα από βιβλιοθήκες που προορίζονται ή είναι συμβατές με το node. Ανάμεσά τους εργαλεία που ξεχώρισαν όπως το node-mysql, το Mongodb και το Express παίζουν σημαντικό ρόλο υποστηρίζοντας την ασύγχρονη διάδραση με τις παραδοσιακές και NoSQL μεθόδους βάσεων δεδομένων. Αυτό επιτυγχάνεται με την χρήση του node package  manager το οποίο επιτρέπει την εγκατάσταση των παραπάνω βιβλιοθηκών. Χρησιμοποιείται συνήθως σε εφαρμογές Chat, Proxy, Http Server καθώς και για παρακολούθηση εφαρμογών και του συστήματος (monitoring).