Node.js Nedir? Node.js Kütüphanesi: Kapsamlı Bir Rehber

 

Node.js Nedir? Node.js Kütüphanesi: Kapsamlı Bir Rehber

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:

  1. Node.js paketlerini yönetmek için komut satırı aracı

  2. 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ı:

bash
Copy
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:

json
Copy
{
  "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:

bash
Copy
npm install express

Temel Kullanım Örneği:

javascript
Copy
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:

bash
Copy
npm install socket.io

Temel Kullanım Örneği:

Sunucu tarafı:

javascript
Copy
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ı:

html
Copy
<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:

bash
Copy
npm install mongoose

Temel Kullanım Örneği:

javascript
Copy
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:

bash
Copy
npm install lodash

Kullanım Örnekleri:

javascript
Copy
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:

bash
Copy
npm install axios

Kullanım Örnekleri:

javascript
Copy
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:

bash
Copy
npm install passport

Temel Kullanım Örneği (Yerel Strateji):

javascript
Copy
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:

bash
Copy
npm install winston

Temel Kullanım Örneği:

javascript
Copy
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:

bash
Copy
npm install --save-dev jest

Temel Kullanım Örneği:

javascript
Copy
// 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:

bash
Copy
npm install nodemailer

Review Node.js Nedir? Node.js Kütüphanesi: Kapsamlı Bir Rehber.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir