Node.js, daha önce de belirtildiği gibi, sunucu (server) tarafında kullanılan JavaScript'tir. Aşağıdaki şekil Node.js'in genel çalışma prensibini veriyor:
Node.js'in geliştirilmesi ve kullanılması şu temel soru çerçevesinde olmuştur: JavaScript'in istemci (client) tarafında mevcut olan ve kullanılan olaya dayalı icra modeli (event based execution) sunucu tarafında kullanılamaz mı?
Bu soruya verilen olumlu cevap sonucu Node.js geliştirilmiştir ve yaygın biçimde de kullanılmaktadır. Node.js, olaya dayalı asenkron fonksiyonlar (event based asynchronous functions) üzerine kurulmuştur. Bir olay (event) çevrimi (loop), G/Ç işlemleri yerine olayların oluşumunu izler; bir olay tetiklenince onunla ilişkili eylem gerçekleştirilir. Node.js, eşzamanlı milyonlarca bağlantıyı yönetecek ölçeklenebilir (scalable) özellikte bir yazılımdır.
Node.js, bu özelliği nedeni ile çok iplikli icra (multi-threaded execution) modelini kullanan PHP vb. sunucu yazılımlarına göre çok daha iyi performans sergilemektedir.
Global - yerel değişkenler
JavaScript'te, öntanımlı olarak tüm değişkenler globaldir. JavaScript'in en çok eleştirilen noktalarından biri de budur. Bu durum Node.js'te tamamen farklıdır. Öntanımlı olarak tüm değişkenler yereldir. Global olması istenen değişkenler global sözcüğü ile global olarak tanımlanır.
Modüllerin içe ve dışa aktarılması
JavaScript'in sakıncalı yönlerinden biri de dışarıdaki modüllerin program içine katılmasını sağlayacak bir yol olmamasıydı. Betikleri (script) sadece HTML kodları içinden çağırma olanağı vardı.
Node.js'te ise modülleri program içine aktarma ya da başka bir programın kullanımına sunma olanağı vardır. Tanımlanan bir modülü dışa aktarmak için;
exports.ad = nesne;
notasyonu kullanılır.
var mesaj={
bul: function(req,res,next){
…
},
ekle: function(req,res,next){
…
},
format:'baslik|tarih|yazar'
};
exports.mesaj = mesaj;
Yukarıdaki modülü dışa aktarmak içinse require fonksiyonu aşağıdaki biçimde kullanılır:
var mesaj = require('./yol/mesaj.js');
Burada yol, mesaj.js'in bulunduğu dizine giden yolu tanımlamaktadır. Özellikle bir node.js uygulama çatısı olan express.js'te bazı durumlarda bir yapıcı (constructor) çağırmak daha uygundur.
module.exports = function(app){
app.set('port', process.env.PORT||3000);
app.set('views', '_dirname+'/views');
app.set('view engine', 'jade');
return app;
}
Yukarıdaki modülü dışa aktaracak dosya ise aşağıdaki gibidir:
…
var app = express();
var config = require('./config/index.js');
app = config(app);
…
Tampon alan (Buffer)
Node.js, dört ilkel tip (Boolean, Number, String, RegExp), dizi, fonksiyon ve nesneler için tampon belleği kullanarak yüksek hız sağlar.
_dirname
process.cwd
process.cwd ise bu betiği çalıştıran işleme giden mutlak yoldur.