Node.js Kütüphanesi: Kapsamlı Bir Rehber
Giriş
Node.js, modern web geliştirme dünyasında devrim yaratan bir JavaScript çalışma zamanı ortamıdır. Özellikle sunucu tarafında JavaScript kullanımını mümkün kılan Node.js, geniş kütüphane ekosistemi sayesinde geliştiricilere büyük esneklik ve güç sunar. Bu makalede, Node.js kütüphanelerinin dünyasını derinlemesine inceleyecek, en popüler modülleri analiz edecek ve projelerinizde nasıl etkili şekilde kullanabileceğinizi göstereceğiz.
Node.js Nedir?
Node.js, Chrome’un V8 JavaScript motoru üzerine inşa edilmiş açık kaynaklı, sunucu tarafında çalışan bir JavaScript çalışma zamanıdır. 2009 yılında Ryan Dahl tarafından geliştirilen Node.js, olay güdümlü (event-driven), non-blocking I/O modeli sayesinde yüksek performanslı ve ölçeklenebilir uygulamalar oluşturmayı mümkün kılar.
Node.js’in Temel Özellikleri
-
Asenkron ve Non-Blocking I/O: Node.js, giriş/çıkış işlemlerini asenkron olarak gerçekleştirir, bu da sunucunun diğer isteklere cevap verebilmesini sağlar.
-
Olay Güdümlü Mimari: Olay döngüsü (event loop) sayesinde yüksek verimlilik sağlar.
-
NPM (Node Package Manager): Dünyanın en büyük yazılım kayıt defteri olan NPM, yüzbinlerce açık kaynaklı paket sunar.
-
Platformlar Arası Uyumluluk: Windows, Linux, macOS gibi tüm büyük işletim sistemlerinde çalışır.
-
Hızlı Performans: V8 JavaScript motoru sayesinde yüksek performans sunar.
Node.js Kütüphane Ekosistemi
Node.js’in en güçlü yanlarından biri, geniş ve çeşitli kütüphane ekosistemidir. NPM (Node Package Manager) üzerinde 1 milyondan fazla paket bulunmaktadır. Bu kütüphaneler, geliştiricilerin sıfırdan kod yazmak yerine var olan çözümleri kullanarak zaman kazanmalarını sağlar.
NPM (Node Package Manager)
NPM, Node.js’in resmi paket yöneticisidir ve iki temel işlevi vardır:
-
Node.js paketlerini yönetmek için komut satırı aracı
-
Node.js paketlerini barındıran çevrimiçi depo
NPM sayesinde geliştiriciler:
-
Projelerine kolayca bağımlılık ekleyebilir
-
Paket sürümlerini yönetebilir
-
Kendi paketlerini yayınlayabilir
-
Komut dosyası çalıştırabilir
Temel NPM komutları:
npm init # Yeni bir proje başlatır npm install <package> # Paket yükler npm update <package> # Paketi günceller npm uninstall <package> # Paketi kaldırır npm publish # Paket yayınlar
package.json Dosyası
Her Node.js projesinin kalbinde package.json dosyası bulunur. Bu dosya:
-
Proje bağımlılıklarını listeler
-
Proje meta verilerini içerir (ad, sürüm, açıklama vb.)
-
Komut dosyalarını tanımlar
-
Paket yapılandırmasını saklar
Örnek bir package.json:
{ "name": "my-awesome-app", "version": "1.0.0", "description": "A sample Node.js application", "main": "index.js", "scripts": { "start": "node index.js", "test": "echo "Error: no test specified" && exit 1" }, "keywords": ["node", "sample", "app"], "author": "Your Name", "license": "ISC", "dependencies": { "express": "^4.17.1", "lodash": "^4.17.21" }, "devDependencies": { "nodemon": "^2.0.7" } }
Temel Node.js Kütüphaneleri
1. Express.js
Express.js, Node.js için minimalist bir web uygulama çatısıdır. Web ve mobil uygulamalar oluşturmak için sağlam bir özellik seti sunar.
Temel Özellikleri:
-
Basit rota yönetimi
-
Middleware desteği
-
Şablon motorları entegrasyonu
-
HTTP yardımcıları (yeniden yönlendirme, önbellek kontrolü vb.)
-
Hızlı uygulama geliştirme
Kurulum:
npm install express
Temel Kullanım Örneği:
const express = require('express'); const app = express(); const port = 3000; app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(port, () => { console.log(`Example app listening at http://localhost:${port}`); });
Express.js Middleware’leri:
-
body-parser
: Gelen istek gövdelerini ayrıştırır -
cookie-parser
: Çerezleri ayrıştırır -
morgan
: HTTP isteklerini günlüğe kaydeder -
helmet
: Güvenlik başlıklarını ayarlar -
cors
: Çapraz kaynak paylaşımını etkinleştirir
2. Socket.io
Socket.io, gerçek zamanlı, iki yönlü ve olay tabanlı iletişim sağlayan bir kütüphanedir. WebSocket tabanlıdır ancak gerektiğinde uzun yoklama (long polling) gibi diğer yöntemlere geri döner.
Kullanım Alanları:
-
Gerçek zamanlı sohbet uygulamaları
-
Çok oyunculu oyunlar
-
Canlı veri görselleştirme
-
İşbirlikçi düzenleme araçları
Kurulum:
npm install socket.io
Temel Kullanım Örneği:
Sunucu tarafı:
const app = require('express')(); const http = require('http').createServer(app); const io = require('socket.io')(http); app.get('/', (req, res) => { res.sendFile(__dirname + '/index.html'); }); io.on('connection', (socket) => { console.log('a user connected'); socket.on('chat message', (msg) => { io.emit('chat message', msg); }); socket.on('disconnect', () => { console.log('user disconnected'); }); }); http.listen(3000, () => { console.log('listening on *:3000'); });
İstemci tarafı:
<script src="/socket.io/socket.io.js"></script> <script> const socket = io(); socket.on('chat message', function(msg) { console.log('message: ' + msg); }); // Mesaj gönderme socket.emit('chat message', 'hello world'); </script>
Run HTML
3. Mongoose
Mongoose, MongoDB için bir ODM (Object Data Modeling) kütüphanesidir. MongoDB ile çalışmayı kolaylaştırır ve şema tabanlı bir çözüm sunar.
Temel Özellikleri:
-
Şema tanımlama
-
Model oluşturma
-
Veri doğrulama
-
Orta düzey işlevler (hook’lar)
-
Popülasyon (ilişkisel veri yönetimi)
Kurulum:
npm install mongoose
Temel Kullanım Örneği:
const mongoose = require('mongoose'); // MongoDB bağlantısı mongoose.connect('mongodb://localhost/test', {useNewUrlParser: true, useUnifiedTopology: true}); // Şema tanımı const kitapSchema = new mongoose.Schema({ baslik: String, yazar: String, sayfaSayisi: Number, yayinlandi: Boolean }); // Model oluşturma const Kitap = mongoose.model('Kitap', kitapSchema); // Yeni belge oluşturma const harryPotter = new Kitap({ baslik: 'Harry Potter ve Felsefe Taşı', yazar: 'J.K. Rowling', sayfaSayisi: 223, yayinlandi: true }); // Veritabanına kaydetme harryPotter.save() .then(() => console.log('Kitap kaydedildi')) .catch(err => console.error(err)); // Tüm kitapları bulma Kitap.find() .then(kitaplar => console.log(kitaplar)) .catch(err => console.error(err));
4. Lodash
Lodash, JavaScript programlamayı kolaylaştıran bir yardımcı kütüphanedir. Dizi, nesne, sayı, dizgi, fonksiyon gibi veri yapıları üzerinde işlem yapmak için kullanışlı fonksiyonlar sunar.
Temel Özellikleri:
-
Koleksiyon işlemleri
-
Dizi manipülasyonu
-
Nesne manipülasyonu
-
Fonksiyonel programlama yardımcıları
-
Performans optimizasyonu
Kurulum:
npm install lodash
Kullanım Örnekleri:
const _ = require('lodash'); // Dizi işlemleri const numbers = [1, 2, 3, 4, 5]; const doubled = _.map(numbers, n => n * 2); const sum = _.sum(numbers); // Nesne işlemleri const user = {name: 'John', age: 30, active: true}; const picked = _.pick(user, ['name', 'age']); const omitted = _.omit(user, ['active']); // Fonksiyonel programlama const addFive = _.partial(_.add, 5); console.log(addFive(3)); // 8 // Derin nesne erişimi const obj = {a: {b: {c: 42}}}; const value = _.get(obj, 'a.b.c'); // 42
5. Axios
Axios, HTTP istekleri yapmak için kullanılan bir istemci kütüphanesidir. Hem tarayıcıda hem de Node.js ortamında çalışır.
Temel Özellikleri:
-
Promise tabanlı API
-
İstek/yanıt dönüşümü
-
İstek iptali
-
Otomatik JSON veri dönüşümü
-
CSRF koruması
Kurulum:
npm install axios
Kullanım Örnekleri:
const axios = require('axios'); // GET isteği axios.get('https://api.example.com/users') .then(response => { console.log(response.data); }) .catch(error => { console.error(error); }); // POST isteği axios.post('https://api.example.com/users', { firstName: 'John', lastName: 'Doe' }) .then(response => { console.log(response.data); }) .catch(error => { console.error(error); }); // Eşzamanlı istekler Promise.all([ axios.get('https://api.example.com/users/1'), axios.get('https://api.example.com/users/2') ]) .then(responses => { console.log('User 1:', responses[0].data); console.log('User 2:', responses[1].data); });
6. Passport.js
Passport.js, Node.js uygulamaları için esnek ve modüler bir kimlik doğrulama ara katmanıdır. 500’den fazla kimlik doğrulama stratejisini destekler.
Desteklenen Stratejiler:
-
Yerel (kullanıcı adı/şifre)
-
OAuth (Facebook, Google, Twitter vb.)
-
OpenID
-
SAML
-
JWT (JSON Web Token)
Kurulum:
npm install passport
Temel Kullanım Örneği (Yerel Strateji):
const passport = require('passport'); const LocalStrategy = require('passport-local').Strategy; passport.use(new LocalStrategy( (username, password, done) => { User.findOne({ username: username }, (err, user) => { if (err) { return done(err); } if (!user) { return done(null, false, { message: 'Incorrect username.' }); } if (!user.validPassword(password)) { return done(null, false, { message: 'Incorrect password.' }); } return done(null, user); }); } )); // Express uygulamasında kullanım app.post('/login', passport.authenticate('local', { successRedirect: '/dashboard', failureRedirect: '/login', failureFlash: true }) );
7. Winston
Winston, Node.js için çok yönlü bir günlük kayıt (logging) kütüphanesidir. Çoklu taşıyıcı desteği, log seviyeleri ve özelleştirilebilir çıktı biçimleri sunar.
Temel Özellikleri:
-
Çoklu taşıyıcılar (konsol, dosya, veritabanı vb.)
-
Özelleştirilebilir log seviyeleri
-
Renkli konsol çıktısı
-
Hızlı ve performanslı
-
Eklenti desteği
Kurulum:
npm install winston
Temel Kullanım Örneği:
const winston = require('winston'); const logger = winston.createLogger({ level: 'info', format: winston.format.json(), transports: [ new winston.transports.File({ filename: 'error.log', level: 'error' }), new winston.transports.File({ filename: 'combined.log' }) ] }); if (process.env.NODE_ENV !== 'production') { logger.add(new winston.transports.Console({ format: winston.format.simple() })); } // Kullanım örnekleri logger.error('Hata mesajı'); logger.warn('Uyarı mesajı'); logger.info('Bilgi mesajı'); logger.verbose('Detaylı mesaj'); logger.debug('Debug mesajı'); logger.silly('Çok detaylı mesaj');
8. Jest
Jest, Facebook tarafından geliştirilen bir JavaScript test çatısıdır. Özellikle React uygulamalarıyla iyi çalışsa da herhangi bir JavaScript projesinde kullanılabilir.
Temel Özellikleri:
-
Sıfır yapılandırma (zero-config)
-
Hızlı ve izole testler
-
Anlık görüntü testleri
-
Kapsamlı mocking desteği
-
Kod kapsamı analizi
Kurulum:
npm install --save-dev jest
Temel Kullanım Örneği:
// sum.js function sum(a, b) { return a + b; } module.exports = sum; // sum.test.js const sum = require('./sum'); test('adds 1 + 2 to equal 3', () => { expect(sum(1, 2)).toBe(3); }); describe('sum function', () => { it('should add two numbers correctly', () => { expect(sum(1, 1)).toBe(2); expect(sum(-1, 1)).toBe(0); expect(sum(0, 0)).toBe(0); }); it('should handle non-number inputs', () => { expect(() => sum('1', '2')).toThrow(); }); });
9. Nodemailer
Nodemailer, Node.js uygulamalarından e-posta göndermek için kullanılan bir modüldür. SMTP, Sendmail, Amazon SES gibi çeşitli taşıyıcıları destekler.
Temel Özellikleri:
-
HTML ve düz metin e-postaları
-
Ekler (dosya, stream, buffer)
-
Gömülü resimler
-
SSL/TLS desteği
-
Özel başlıklar
Kurulum:
npm install nodemailer
Review Node.js Nedir? Node.js Kütüphanesi: Kapsamlı Bir Rehber.