Node.js Temelleri

Başlangıç Rehberi

Node.js, sunucu tarafında çalışan ve JavaScript dilini kullanan açık kaynaklı bir çalışma zamanı ortamıdır. Bu platform, web uygulamaları geliştirmek için kullanılan etkili ve hızlı bir araçtır. Bu yazıda, Node.js’nin temellerini anlamak için adım adım bir rehber sunacağız.

Node.js Nedir?

Node.js, Chrome V8 JavaScript motoru üzerine inşa edilmiş bir çalışma zamanı ortamıdır. JavaScript’i sunucu tarafında çalıştırabilme yeteneği sunar, bu da geliştiricilere tek bir dilde (JavaScript) hem istemci hem de sunucu taraflı kod yazma imkanı tanır. Bu özellik, işlerin daha hızlı ve verimli bir şekilde yürütülmesine olanak tanır.

Node.js Kurulumu

Node.js’i bilgisayarınıza kurmak oldukça basittir. Resmi Node.js web sitesinden en son sürümü indirip kurabilirsiniz. Şu adımları izleyebilirsiniz:

İlgili Makaleler
  1. Node.js web sitesini ziyaret edin.
  2. İndirilen sürümü seçin ve işletim sistemine uygun olanı indirin.
  3. İndirilen dosyayı çalıştırarak kurulumu tamamlayın.

Node.js Temel Kavramlar

1. Modüller

Node.js’de kodunuzu düzenli ve yönetilebilir kılmak için modüller kullanılır. Modüller, işlevselliği paketleyen ve başka dosyalarda kullanılabilen bağımsız kod parçacıklarıdır.

javascript
// Örnek bir modül
const greetings = require('./greetings');
console.log(greetings.sayHello());

2. Paket Yöneticisi (npm)

Node.js, npm (Node Package Manager) adlı bir paket yöneticisi içerir. npm, projelerinizde kullanmak üzere binlerce önceden yazılmış paketi kolayca indirmenizi ve yönetmenizi sağlar.

bash
# Paket kurma
npm install paket-adi

# Paket güncelleme
npm update paket-adi

3. HTTP Modülü

Node.js, sunucu tarafında web uygulamaları oluşturmak için kullanılan dahili bir HTTP modülü içerir.

javascript
const http = require('http');

const server = http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Merhaba, dünya!\n');
});

server.listen(3000, 'localhost', () => {
console.log('Sunucu çalışıyor: http://localhost:3000/');
});

CodeBak.com ve Node.js

CodeBak.com, Node.js kullanıcılarının deneyimlerini paylaştığı bir topluluk platformudur. Platformda, Node.js ile ilgili çeşitli makaleler, öğreticiler ve projeler bulabilirsiniz. Ayrıca, sorularınızı sormak ve diğer geliştiricilerle etkileşimde bulunmak için forum bölümünü kullanabilirsiniz.

Bu yazıda, Node.js temellerini anlamak için temel kavramlar ve örneklerle birlikte adım adım bir rehber sunduk. CodeBak.com’u ziyaret ederek daha fazla kaynak ve bilgiye ulaşabilirsiniz.

Asenkron Programlama ve Callback Fonksiyonları

Node.js, asenkron programlama modelini benimser. Bu, işlemlerin eşzamanlı olarak gerçekleştirilebildiği ve tek bir işlemi bekletmeden diğer işlemlerin devam edebildiği anlamına gelir. Bu, özellikle ağ tabanlı uygulamalarda ve dosya işlemlerinde performansı artırır.

javascript
// Asenkron bir dosya okuma örneği
const fs = require('fs');

fs.readFile('dosya.txt', 'utf8', (err, data) => {
if (err) {
console.error(err);
return;
}
console.log('Dosya içeriği:', data);
});

Express.js ve Web Uygulamaları

Express.js, Node.js tabanlı web uygulamaları oluşturmak için popüler bir web çerçevesidir. Hızlı, esnek ve minimal bir yapıya sahiptir.

bash
# Express.js kurulumu
npm install express
javascript
// Express.js kullanarak basit bir web sunucu
const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
res.send('Merhaba, Express!');
});

app.listen(port, () => {
console.log(`Uygulama http://localhost:${port} adresinde çalışıyor`);
});

Veritabanı Bağlantısı

Node.js, çeşitli veritabanlarına erişim sağlayan modüllerle entegre edilebilir. Örneğin, MongoDB veritabanına erişim sağlayan mongoose modülünü kullanabilirsiniz.

bash
# Mongoose kurulumu
npm install mongoose
javascript
// MongoDB'ye bağlanma örneği
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/veritabani-adi', {useNewUrlParser: true, useUnifiedTopology: true});

const db = mongoose.connection;
db.on('error', console.error.bind(console, 'Bağlantı hatası:'));
db.once('open', () => {
console.log('MongoDB bağlantısı başarıyla açıldı');
});

Bu yazıda, Node.js’in temel kavramlarından başlayarak asenkron programlamaya, Express.js ile web uygulamaları oluşturmaya ve veritabanı bağlantılarına kadar birçok konuya değindik. CodeBak.com’u ziyaret ederek daha fazla içerik ve öğreticiye erişebilir, toplulukla etkileşimde bulunabilirsiniz. Başarılar dileriz!

Middleware Kavramı ve Kullanımı

Express.js’te middleware’ler, isteği işlemeden önce veya sonra gerçekleşen işlevlerdir. Bu, isteği değiştirmenize, güncellemenize veya kontrol etmenize olanak tanır. Örneğin, isteği işlemeden önce bir güvenlik kontrolü gerçekleştirmek için middleware kullanabilirsiniz.

javascript
// Basit bir güvenlik middleware örneği
const securityMiddleware = (req, res, next) => {
// Güvenlik kontrolleri burada yapılır
if (req.headers['authorization'] !== 'gizlianahtar') {
res.status(401).send('Yetkisiz erişim');
return;
}
// Eğer güvenlik kontrolleri başarılı ise diğer middleware veya işlevlere devam et
next();
};

// Middleware'i uygulama seviyesinde kullanma
app.use(securityMiddleware);

// Ardından gelen her istek bu middleware'den geçer

WebSocket ve Gerçek Zamanlı İletişim

Node.js, WebSocket protokolünü destekleyen modüller aracılığıyla gerçek zamanlı iletişim sağlar. Bu, sunucu ile istemci arasında çift yönlü iletişim kurmaya olanak tanır.

bash
# WebSocket modülü kurulumu
npm install ws
javascript
// WebSocket sunucu örneği
const WebSocket = require('ws');
const wss = new WebSocket.Server({ server });

wss.on('connection', (ws) => {
console.log('Yeni bir bağlantı oluşturuldu');

ws.on('message', (message) => {
console.log(`Alınan mesaj: ${message}`);
});

ws.send('Bağlantı başarıyla kuruldu');
});

Test Driven Development (TDD)

Node.js projelerinde Test Driven Development (TDD), kodunuzu testlerle yazmaya dayanan bir geliştirme metodolojisidir. Bu, kodunuzun sağlam, güvenilir ve beklenen davranışları sergilediğinden emin olmanıza yardımcı olabilir.

bash
# Jest test çerçevesi kurulumu
npm install jest --save-dev
javascript
// Basit bir Jest test örneği
const sum = (a, b) => {
return a + b;
};

test('2 + 3 eşittir 5', () => {
expect(sum(2, 3)).toBe(5);
});

Bu yazıda, Express.js ile middleware kullanımından WebSocket’e, Test Driven Development’a kadar birçok konuyu ele aldık. CodeBak.com’u ziyaret ederek daha fazla bilgiye ulaşabilir ve geliştirme sürecinizde Node.js’in sunduğu güçlü özellikleri keşfetmeye devam edebilirsiniz.

NPM Script’leri ve Otomasyon

Node.js projelerinde yaygın olarak kullanılan NPM script’leri, çeşitli görevleri otomatikleştirmenizi sağlar. Örneğin, projenizi başlatmak, testleri çalıştırmak veya derleme işlemlerini gerçekleştirmek için script’ler oluşturabilirsiniz.

json
// package.json dosyasındaki script örneği
{
"scripts": {
"start": "node server.js",
"test": "jest",
"build": "babel src -d dist"
}
}

Bu script’leri terminalde şu şekilde çalıştırabilirsiniz:

bash
# Proje başlatma
npm start

# Testleri çalıştırma
npm test

# Proje derleme
npm run build

Docker ve Konteynerle Dağıtım

Docker, uygulamaları hafif, taşınabilir konteynerlarda çalıştırmak için kullanılan bir platformdur. Node.js projelerini Docker konteynerına dahil etmek, uygulamanızın farklı ortamlarda kolayca dağıtılabilmesini sağlar.

Örnek bir Dockerfile:

dockerfile
# Dockerfile örneği
FROM node:14

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 3000

CMD ["npm", "start"]

Docker konteynerınızı oluşturmak ve çalıştırmak için şu komutları kullanabilirsiniz:

bash
# Docker imajını oluşturma
docker build -t proje-adi .

# Docker konteynerını çalıştırma
docker run -p 3000:3000 -d proje-adi

Sürekli Entegrasyon ve Sürekli Dağıtım (CI/CD)

Node.js projelerinde sürekli entegrasyon (CI) ve sürekli dağıtım (CD) uygulamak, kodunuzu otomatik olarak test etmek ve güncellemeleri sorunsuz bir şekilde dağıtmak için önemlidir. Jenkins, Travis CI, CircleCI gibi araçlar kullanarak bu süreçleri kolayca yönetebilirsiniz.

Bu yazıda, NPM script’leriyle otomasyondan Docker kullanımına ve sürekli entegrasyon/sürekli dağıtım uygulamalarına kadar birçok konuyu ele aldık. CodeBak.com’da ilgili makalelere göz atarak daha fazla bilgi edinebilir ve projelerinizi daha verimli bir şekilde yönetebilirsiniz.

Yapılandırma Yönetimi ve Ortam Değişkenleri

Node.js projelerinde, farklı ortamlarda (geliştirme, üretim, test vb.) farklı yapılandırmalar kullanmak önemlidir. Bu, örneğin veritabanı bağlantı bilgileri veya güvenlik anahtarları gibi hassas verileri güvenli bir şekilde yönetmenize olanak tanır.

javascript
// Yapılandırma yönetimi örneği
const config = {
development: {
database: 'mongodb://localhost/dev-db',
apiKey: 'development-key'
},
production: {
database: 'mongodb://production-server/prod-db',
apiKey: 'production-key'
}
};

// Ortama özel yapılandırma kullanma
const env = process.env.NODE_ENV || 'development';
const currentConfig = config[env];

console.log(`Kullanılan yapılandırma: ${env}`);
console.log(`Veritabanı bağlantısı: ${currentConfig.database}`);

Yapılandırma yönetimi sayesinde, projenizi farklı ortamlara sorunsuz bir şekilde uyarlayabilirsiniz.

RESTful API Geliştirme

Node.js, RESTful API’lar oluşturmak için ideal bir platformdur. Express.js kullanarak hızlıca API’larınızı tasarlayabilir ve geliştirebilirsiniz.

javascript
// Basit bir RESTful API örneği
const express = require('express');
const app = express();
const port = 3000;

app.use(express.json());

app.get('/api/users', (req, res) => {
// Kullanıcı listesi döndürme
res.json({ users: [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }] });
});

app.post('/api/users', (req, res) => {
// Yeni kullanıcı eklemek
const newUser = req.body;
// Veritabanına ekleme işlemi
res.json({ message: 'Kullanıcı başarıyla eklendi', user: newUser });
});

app.listen(port, () => {
console.log(`API sunucu http://localhost:${port} adresinde çalışıyor`);
});

Güvenlik ve OAuth 2.0

Node.js projelerinde güvenlik, önemli bir konudur. Özellikle kullanıcı kimlik doğrulama ve yetkilendirme işlemlerini yönetmek için OAuth 2.0 gibi protokoller kullanabilirsiniz.

OAuth 2.0 kullanarak, kullanıcıların güvenli bir şekilde uygulamanıza bağlanmasını ve yetkilendirilmiş işlemleri gerçekleştirmesini sağlayabilirsiniz.

Bu yazıda, yapılandırma yönetiminden RESTful API geliştirmeye ve güvenlik önlemlerine kadar birçok konuya değindik. CodeBak.com’u ziyaret ederek daha fazla kaynak ve derinlemesine bilgi edinebilir, projelerinizi daha güvenli ve verimli bir şekilde geliştirmeye devam edebilirsiniz.

Mikroservis Mimarisi ve Dağıtık Sistemler

Node.js, mikroservis mimarisine uygun bir şekilde kullanılabilir. Bu yaklaşım, büyük uygulamaları daha küçük, bağımsız hizmetlere bölmeyi ve her bir hizmeti ayrı bir mikroservis olarak çalıştırmayı içerir. Bu, ölçeklenebilirlik ve bakım kolaylığı sağlar.

javascript
// Basit bir mikroservis örneği
// Servis A
const expressA = require('express');
const appA = expressA();
const portA = 3001;

appA.get('/api/serviceA', (req, res) => {
res.json({ message: 'Bu Servis A' });
});

appA.listen(portA, () => {
console.log(`Servis A http://localhost:${portA} adresinde çalışıyor`);
});

// Servis B
const expressB = require('express');
const appB = expressB();
const portB = 3002;

appB.get('/api/serviceB', (req, res) => {
res.json({ message: 'Bu Servis B' });
});

appB.listen(portB, () => {
console.log(`Servis B http://localhost:${portB} adresinde çalışıyor`);
});

GraphQL ve Veri Sorgulama

Node.js projelerinde GraphQL, geleneksel RESTful API’lar yerine kullanılabilecek modern bir sorgu dilidir. GraphQL, istemcinin ihtiyaç duyduğu veriyi belirleyerek daha verimli sorgular yapmanıza olanak tanır.

javascript
// Basit bir GraphQL servisi
const { ApolloServer, gql } = require('apollo-server');

const typeDefs = gql`
type Query {
hello: String
}
`
;

const resolvers = {
Query: {
hello: () => 'Merhaba, GraphQL!'
}
};

const server = new ApolloServer({ typeDefs, resolvers });

server.listen().then(({ url }) => {
console.log(`GraphQL servisi ${url} adresinde çalışıyor`);
});

Serverless ve AWS Lambda

Node.js, serverless (sunucusuz) uygulamalar geliştirmek için ideal bir dil olarak kabul edilir. AWS Lambda gibi serverless hizmetlerini kullanarak uygulamalarınızı daha küçük fonksiyonlara bölebilir ve ihtiyaca göre ölçeklendirebilirsiniz.

javascript
// AWS Lambda fonksiyonu örneği
exports.handler = async (event) => {
const response = {
statusCode: 200,
body: JSON.stringify('Merhaba, AWS Lambda!'),
};
return response;
};

Bu yazıda, mikroservis mimarisi, GraphQL, serverless uygulamalar ve AWS Lambda gibi konulara değindik. CodeBak.com’u ziyaret ederek daha fazla bilgiye ulaşabilir ve Node.js ile geliştirdiğiniz projeleri daha da geliştirmek için yeni konseptleri keşfetmeye devam edebilirsiniz.

Performans Optimizasyonu ve Caching

Node.js projelerinde performans optimizasyonu, uygulamanızın hızlı ve etkili bir şekilde çalışmasını sağlamak için önemlidir. Bu kapsamda, önbellek (caching) mekanizmalarını kullanarak sık erişilen verileri ve işlemleri önbelleğe alabilirsiniz.

javascript
// Basit bir önbellek kullanımı
const cache = {};

const fetchDataFromDatabase = (key) => {
// Veritabanından veri çekme işlemi
// ...
return 'Veri tabanından alınan veri';
};

const getData = (key) => {
if (cache[key]) {
// Önbellekte veri varsa, önbellekten al
return cache[key];
} else {
// Önbellekte veri yoksa, veritabanından al ve önbelleğe ekle
const data = fetchDataFromDatabase(key);
cache[key] = data;
return data;
}
};

WebSockets ve Gerçek Zamanlı Uygulamalar

Node.js, WebSockets’i destekleyerek gerçek zamanlı uygulamalar geliştirmenizi sağlar. Bu, anlık bildirimler, canlı sohbet uygulamaları ve gerçek zamanlı veri güncelleştirmeleri için idealdir.

javascript
// WebSockets ile gerçek zamanlı uygulama örneği
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', (ws) => {
console.log('Yeni bir bağlantı oluşturuldu');

ws.on('message', (message) => {
console.log(`Alınan mesaj: ${message}`);
// Mesajı diğer bağlı istemcilere iletilmesi
wss.clients.forEach((client) => {
if (client !== ws && client.readyState === WebSocket.OPEN) {
client.send(`Gelen mesaj: ${message}`);
}
});
});

ws.send('Bağlantı başarıyla kuruldu');
});

Günlükleme ve Hata İzleme

Node.js projelerinde günlükleme (logging) ve hata izleme, uygulamanızın sağlığını izlemek ve sorunları hızlıca tespit etmek için önemlidir. Bu amaçla, popüler günlükleme kütüphanelerini kullanabilir ve hata izleme araçlarına entegre edebilirsiniz.

javascript
// Basit bir günlükleme kullanımı
const winston = require('winston');

const logger = winston.createLogger({
level: 'info',
format: winston.format.simple(),
transports: [
new winston.transports.Console(),
new winston.transports.File({ filename: 'uygulama.log' }),
],
});

logger.info('Uygulama başlatıldı');

// Hata izleme
process.on('uncaughtException', (err) => {
logger.error(`Beklenmeyen hata: ${err.message}`);
process.exit(1);
});

Bu yazıda, performans optimizasyonundan gerçek zamanlı uygulamalara ve günlükleme/hata izlemeye kadar birçok konuya değindik. CodeBak.com’u ziyaret ederek daha fazla kaynak ve derinlemesine bilgi edinebilir, projelerinizi daha güvenli ve verimli bir şekilde geliştirmeye devam edebilirsiniz. İyi çalışmalar!

Bir yanıt yazın

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