Το 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. Αυτό με την σειρά του επιτρέπει την ροή του κώδικα χωρίς να αφήνει ανενεργό τονεπεξεργαστή προκειμένου να εκτελεστεί μια λειτουργία, όπως μια επιτυχής ανάγνωση αρχείου από τονδίσκο.
Ένα χαρακτηριστικό παράδειγμαnode για ένα απλόHTTP εξυπηρετητή είναι ο παρακάτω κώδικας
varhttp=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/%5Bνεκρός+σύνδεσμος%5D" και να του εμφανιστεί μια σελίδα με το "Hello World" σαν κείμενο. Για την εκτέλεση του παραπάνω προγράμματος απαιτείται η αποθήκευση του παραπάνω κώδικα σε ένα αρχείο (έστω my_basic_http_server.js) με την εντολή:
$nodemy_basic_http_server.js
στην κονσόλα του συστήματος που χρησιμοποιεί.
varfs=require('fs');fs.writeFile("D:\myfile.txt","Hello World",function(err,data){if(err)throwerr;console.log(data);})Ο παραπάνω κώδικας χρησιμοποιεί την έτοιμη βιβλιοθήκη του node για την επεξεργασία αρχείων με την εντολή "require([library_name])" και δημιουργεί ή αντικαθιστά στην περίπτωση που υπάρχει στο δίσκο D το αρχείο "myfile.txt" με περιεχόμενο "hello world". Όταν ολοκληρωθεί η λειτουργία αυτή της εγγραφής, πυροδοτείται το callback το οποίο ορίστηκε, και αυτό με την σειρά του είτε στέλνει ένα μήνυμα προβλήματος στην περίπτωση αποτυχίας, είτε στέλνει τα δεδομένα του αρχείου στην κονσόλα του χρήστη.
Η κοινότητα έχει δημιουργήσει ένα ολόκληρο οικοσύστημα απόβιβλιοθήκες που προορίζονται ή είναι συμβατές με τοnode. Ανάμεσά τους εργαλεία που ξεχώρισαν όπως το node-mysql, το Mongodb και το Express παίζουν σημαντικό ρόλο υποστηρίζοντας την ασύγχρονη διάδραση με τις παραδοσιακές καιNoSQL μεθόδουςβάσεων δεδομένων. Αυτό επιτυγχάνεται με την χρήση τουnode package manager το οποίο επιτρέπει την εγκατάσταση των παραπάνω βιβλιοθηκών. Χρησιμοποιείται συνήθως σε εφαρμογέςChat,Proxy,HttpServer καθώς και για παρακολούθηση εφαρμογών και του συστήματος (monitoring).[3]