Express.js Framework

Web Uygulamaları İçin Hızlı ve Esnek Bir Çözüm

Express.js, Node.js tabanlı bir web uygulama çerçevesidir ve özellikle hızlı, minimal ve esnek olmasıyla bilinir. Bu eğitici yazıda, Express.js’in temel konseptlerini anlayacak ve kodbak.com adlı internet sitesinin kullanımı üzerinden örneklerle pratiğe dökeceğiz.

Express.js Nedir?

Express.js, web uygulamaları ve API’lar oluşturmak için kullanılan bir Node.js çerçevesidir. Minimalist tasarımı ve güçlü özellik seti sayesinde, geliştiricilere hızlı bir şekilde uygulama oluşturma ve yönetme imkanı sunar.

Başlangıç

Express.js kullanmaya başlamak için öncelikle Node.js’in yüklü olması gerekir. Daha sonra, Express.js’i projemize ekleyebilmek için terminale şu komutu yazabiliriz:

İlgili Makaleler
bash
npm install express

Projenizde Express.js’i başarıyla ekledikten sonra, temel bir uygulama oluşturabiliriz. İlk adım olarak, bir Express uygulamasını başlatmak için aşağıdaki gibi bir JavaScript dosyası oluşturalım (örneğin, app.js):

javascript
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.`);
});

Yukarıdaki örnekte, basit bir Express uygulaması oluşturduk. Tarayıcınızda http://localhost:3000 adresine gittiğinizde, “Merhaba, Express!” metniyle karşılaşmalısınız.

Temel Express.js Kavramları

Rotalar

Express.js, HTTP metodlarına (GET, POST, PUT, DELETE, vb.) ve URL yollarına dayalı olarak çalışan rota sistemine sahiptir. Örneğin, bir kullanıcının profil sayfasına gitmek için aşağıdaki gibi bir rota tanımlayabiliriz:

javascript
app.get('/profil', (req, res) => {
res.send('Kullanıcı Profili');
});

Bu, tarayıcınızda http://localhost:3000/profil adresine gittiğinizde “Kullanıcı Profili” metniyle karşılaşmanızı sağlar.

Middleware

Express.js, middleware’leri kullanarak HTTP taleplerini işlemek için bir yol sağlar. Middleware’ler, talep ve yanıtları değiştirmek, loglamak, doğrulama yapmak veya başka işlemler gerçekleştirmek için kullanılabilir. Aşağıda, basit bir loglama middleware örneği bulunmaktadır:

javascript
app.use((req, res, next) => {
console.log(`[${new Date()}] - ${req.method} ${req.url}`);
next();
});

Bu middleware, her talep geldiğinde loglama yapacaktır.

CodeBak ile Express.js

CodeBak, Express.js kullanımını daha da anlamamıza yardımcı olacak bir dizi kaynak ve örnek içermektedir. İlgili belgeleri inceleyerek ve çeşitli örnek projeleri uygulayarak Express.js becerilerinizi geliştirebilirsiniz. Ayrıca, CodeBak üzerinde toplulukla etkileşimde bulunarak deneyimlerinizi paylaşabilir ve diğer geliştiricilerden yardım alabilirsiniz.

Middleware’lerle İleri Düzey İşlemler

Express.js’in gücü, middleware’ler aracılığıyla HTTP taleplerini işleyerek ve yönlendirerek gelir. Middleware’leri kullanarak, talepleri işlemek üzere özel işlevselliği entegre edebilir ve uygulamanızın davranışını özelleştirebilirsiniz.

javascript
// Özel bir middleware örneği
const customMiddleware = (req, res, next) => {
// Middleware işlemleri burada yapılır
console.log('Özel Middleware Çalıştı');
next(); // Bir sonraki middleware'e geç
};

// Middleware'leri uygulamaya ekleme
app.use(customMiddleware);

Yukarıdaki örnekte, customMiddleware adlı özel bir middleware oluşturduk ve uygulamamıza ekledik. Bu middleware, herhangi bir talep geldiğinde loglama yapacak ve ardından bir sonraki middleware’e geçecektir.

Parametrelerle Çalışma

Express.js, URL parametrelerini ve query string’leri kolayca işlemenizi sağlar. Örneğin, kullanıcının adını içeren bir URL parametresini almak için:

javascript
app.get('/profil/:kullaniciAdi', (req, res) => {
const kullaniciAdi = req.params.kullaniciAdi;
res.send(`Profil sayfası: ${kullaniciAdi}`);
});

Yukarıdaki örnekte, :kullaniciAdi ifadesi URL’de bir parametreyi temsil eder ve bu değeri req.params aracılığıyla alabiliriz.

Şablon Motorları ve Görünümler

Express.js, HTML dosyalarını dinamik içerikle doldurmak için şablon motorlarıyla entegre çalışabilir. Örneğin, popüler bir şablon motoru olan EJS’i kullanmak için:

bash
npm install ejs

Daha sonra uygulama başlangıcında şu satırı ekleyebiliriz:

javascript
app.set('view engine', 'ejs');

Ardından, views klasörü içinde EJS uzantılı dosyaları kullanarak dinamik HTML oluşturabiliriz.

Express.js ile API Geliştirme

Express.js, API geliştirmek için de mükemmel bir araçtır. JSON verilerini döndürmek için:

javascript
app.get('/api/kullanicilar', (req, res) => {
const kullanicilar = [{ ad: 'John', yas: 30 }, { ad: 'Jane', yas: 25 }];
res.json(kullanicilar);
});

Bu örnek, tarayıcıda /api/kullanicilar adresine gidildiğinde JSON formatında kullanıcı bilgilerini döndürür.

CodeBak ile Daha Fazla Öğrenme

CodeBak üzerinde Express.js ile ilgili daha fazla kaynak bulabilirsiniz. Projeler geliştirerek, topluluk ile etkileşimde bulunarak ve öğrenmeye devam ederek becerilerinizi geliştirebilirsiniz. CodeBak’in sunduğu zengin içerik ve interaktif öğrenme ortamı, Express.js’i daha iyi anlamanıza yardımcı olacaktır.

Veritabanı İşlemleri ve MongoDB Kullanımı

Express.js, çeşitli veritabanlarıyla entegre olabilir, ancak özellikle MongoDB ile sıkça kullanılır. MongoDB, NoSQL tabanlı bir veritabanıdır ve Express.js ile kolayca entegre edilebilir.

bash
npm install mongoose

Yukarıdaki komutu kullanarak, MongoDB’yi kullanmak için gerekli olan Mongoose kütüphanesini projenize ekleyebilirsiniz. Daha sonra, Mongoose’i kullanarak MongoDB’ye bağlanabilir ve veritabanı işlemleri gerçekleştirebilirsiniz.

javascript
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/uygulamaVeritabani', {useNewUrlParser: true, useUnifiedTopology: true});

Yukarıdaki örnekte, mongoose.connect ile MongoDB veritabanına bağlanıyoruz.

Oturum Yönetimi ve Güvenlik

Express.js, oturum yönetimi ve güvenlik konularında çeşitli stratejiler sunar. Örneğin, express-session ve passport gibi modüllerle oturum yönetimi ve kullanıcı kimlik doğrulama işlemlerini kolayca entegre edebilirsiniz.

bash
npm install express-session passport passport-local

Yukarıdaki komutlarla gerekli modülleri projenize ekleyebilirsiniz. Ardından, oturum yönetimi için Express.js’in sunduğu özellikleri kullanabilir ve kullanıcı kimlik doğrulama stratejilerini entegre edebilirsiniz.

WebSocket ve Real-Time Uygulamalar

Express.js, WebSocket protokolünü kullanarak gerçek zamanlı iletişim ve uygulamalar geliştirmek için de kullanılabilir. Örneğin, socket.io modülünü kullanarak basit bir sohbet uygulaması oluşturabilirsiniz.

bash
npm install socket.io

Express.js uygulamanıza socket.io‘yu ekledikten sonra, WebSocket ile gerçek zamanlı iletişim sağlayabilirsiniz.

Güncel Kalma ve Topluluk İle Etkileşim

Express.js ve web geliştirme konusundaki teknolojiler sürekli olarak güncellenir. Gelişmeleri takip etmek ve toplulukla etkileşimde bulunmak önemlidir. CodeBak üzerindeki makaleleri, forumları ve güncel kaynakları kullanarak Express.js konusundaki bilgilerinizi güncel tutabilir ve geliştirebilirsiniz.

Middleware Zincirleri ve Kontrol Akışı

Express.js, middleware’lerin sıralanmasıyla oluşan bir zincir üzerinden kontrol akışını yönetme esnekliği sunar. Middleware’ler, sırasıyla işlenir ve bir işlev, talep ve yanıt nesnelerini değiştirerek veya işleyerek kontrolü bir sonraki middleware’e aktarır. Bu sayede talep ve yanıtları özelleştirmek, doğrulama işlemleri gerçekleştirmek veya loglama yapmak gibi farklı işlemleri sıralı bir şekilde uygulayabilirsiniz.

javascript
// Middleware zinciri örneği
app.use(middleware1);
app.use(middleware2);
app.use(middleware3);
// ...

Middleware’lerin sırası önemli olabilir, çünkü bir middleware işlemi diğerine bağlı olabilir. Bu sayede, uygulamanızın isteği nasıl işleyeceğini çok granüler bir şekilde kontrol edebilirsiniz.

Error Middleware ve Hata Yönetimi

Express.js, hata yönetimi için özel middleware’leri destekler. Özellikle app.use veya route özelinde tanımlanan middleware’ler, hatayı yakalayarak özel hata mesajlarını oluşturabilir ve isteği uygun bir şekilde yönlendirebilir.

javascript
// Hata middleware'i
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Bir hata oluştu!');
});

Bu tür bir middleware, uygulamanızda meydana gelen hataları yakalayacak ve isteği uygun şekilde yönlendirecektir.

Uygulama Yapısını Organize Etme

Express.js uygulamalarınızı büyüdükçe, kodunuzu düzenli ve yönetilebilir bir şekilde tutmak önemlidir. Projenizi modüler hale getirerek, her bir özellik için ayrı dosyalar ve klasörler kullanarak kodunuzu organize edebilirsiniz. Bu, bakımı kolaylaştırır ve işbirliği yapmayı daha etkili hale getirir.

plaintext
proje_klasoru/
|-- routes/
| |-- anaRoutes.js
| |-- kullaniciRoutes.js
|-- controllers/
| |-- anaController.js
| |-- kullaniciController.js
|-- models/
| |-- kullaniciModel.js
|-- views/
| |-- anaSayfa.ejs
| |-- kullaniciProfil.ejs
|-- app.js

Yukarıdaki gibi bir proje yapısı, uygulamanızın farklı bileşenlerini ayrı dosyalarda tutmanıza olanak tanır ve kodunuzu daha sürdürülebilir hale getirir.

RESTful API Tasarımı

Express.js, RESTful API’lar oluşturmak için ideal bir çerçevedir. HTTP metodlarını ve URL yapılarını kullanarak kaynaklara erişimi düzenlemeniz mümkündür. Örneğin:

javascript
// Bir RESTful endpoint
app.get('/api/kullanicilar', (req, res) => {
// Kullanıcıları getir
res.json({ mesaj: 'Kullanıcı listesi getirildi.' });
});

app.post('/api/kullanicilar', (req, res) => {
// Yeni bir kullanıcı oluştur
res.json({ mesaj: 'Yeni kullanıcı oluşturuldu.' });
});

RESTful tasarım prensiplerine uygun olarak, farklı HTTP metodlarına ve URL yapılarına uygun işlemleri tanımlayabilirsiniz.

Express.js ile İleri Düzey Konulara Geçiş

Express.js, daha birçok ileri düzey konu içerir. Güvenlik önlemleri, performans iyileştirmeleri, test yazma, GraphQL entegrasyonu gibi konuları öğrenmek, Express.js becerilerinizi daha da artırmanıza yardımcı olacaktır. Bu konularda CodeBak ve diğer kaynakları kullanarak derinlemesine bilgi edinebilirsiniz.

Web Güvenliği ve Express.js

Express.js uygulamalarının güvenliği, birkaç önemli faktöre bağlıdır. Özellikle, güvenlik önlemleri almak, kullanıcı girişlerini doğrulamak ve güvenlik açıklarını kapatmak önemlidir. Aşağıda, Express.js uygulamalarında dikkate almanız gereken bazı güvenlik konuları bulunmaktadır:

Cross-Site Scripting (XSS) Koruması

Express.js, varsayılan olarak XSS saldırılarına karşı korunma sağlamaz. Bu nedenle, kullanıcı girişlerini güvenli bir şekilde işlemek ve çıktıları uygun şekilde kodlamak önemlidir.

javascript
const escapeHTML = (str) => {
return str.replace(/</g, "&lt;").replace(/>/g, "&gt;");
};

app.get('/profil', (req, res) => {
const kullaniciAdi = req.params.kullaniciAdi;
res.send(`Profil sayfası: ${escapeHTML(kullaniciAdi)}`);
});

Yukarıdaki örnek, kullanıcı girişlerini işlerken HTML kodlarını güvenli bir şekilde kaçırarak XSS saldırılarına karşı bir önlem alır.

SQL Enjeksiyonundan Kaçınma

Express.js uygulamalarında veritabanı sorgularını oluştururken, SQL enjeksiyonundan kaçınmak önemlidir. Mongoose gibi ORM’ler veya parametreli sorgular kullanarak bu riski azaltabilirsiniz.

javascript
const kullaniciAdi = req.params.kullaniciAdi;
const sorgu = `SELECT * FROM kullanicilar WHERE kullaniciAdi = '${kullaniciAdi}'`;

Yukarıdaki örnek, kullanıcı girişini doğrudan sorguya eklediği için SQL enjeksiyonu açık bir kod parçasını temsil eder. Bunun yerine Mongoose veya parametreli sorgular kullanarak bu riski azaltabilirsiniz.

JWT (JSON Web Token) Kullanımı

Express.js uygulamalarında kullanıcı kimlik doğrulama ve oturum yönetimi için JSON Web Token (JWT) kullanabilirsiniz. Bu, kullanıcı bilgilerini güvenli bir şekilde taşımanıza ve doğrulamanıza olanak tanır.

javascript
const jwt = require('jsonwebtoken');

// Token oluşturma
const token = jwt.sign({ kullaniciId: '1234' }, 'gizliAnahtar', { expiresIn: '1h' });

// Token doğrulama
jwt.verify(token, 'gizliAnahtar', (err, decoded) => {
if (err) {
res.status(401).send('Geçersiz token');
} else {
// Token doğrulandı, işlemleri gerçekleştir
}
});

JWT kullanımı, uygulamanızın güvenliğini artırmak için etkili bir yöntemdir.

Performans İyileştirmeleri

Express.js uygulamalarının performansını artırmak için bazı önemli faktörler vardır. Özellikle, önbellekleme, gzip sıkıştırma, CDN kullanımı gibi tekniklerle uygulamanızın hızını artırabilirsiniz.

Önbellekleme

Express.js uygulamanızda veritabanı sorgularını ve sık kullanılan içerikleri önbellekleme, sayfa yükleme sürelerini azaltabilir.

javascript
const redis = require('redis');
const client = redis.createClient();

app.get('/api/kullanicilar', (req, res) => {
const cacheKey = 'kullanicilar';

client.get(cacheKey, (err, cacheData) => {
if (cacheData) {
res.json(JSON.parse(cacheData));
} else {
// Veritabanından veri çekme ve önbelleğe alma
const kullanicilar = [{ ad: 'John', yas: 30 }, { ad: 'Jane', yas: 25 }];
client.setex(cacheKey, 3600, JSON.stringify(kullanicilar));
res.json(kullanicilar);
}
});
});

Bu örnekte, Redis kullanarak önbellekleme işlemi gerçekleştirilmiştir.

Gzip Sıkıştırma

Express.js uygulamanızın servis ettiği içerikleri gzip sıkıştırma, veri transferini azaltarak sayfa yükleme hızını artırabilir.

javascript
const compression = require('compression');
app.use(compression());

Yukarıdaki örnekte, compression modülü kullanılarak Gzip sıkıştırma uygulanmıştır.

CDN Kullanımı

Büyük statik dosyalarınızı bir CDN (Content Delivery Network) üzerinden servis etmek, dosya indirme sürelerini azaltabilir ve kullanıcı deneyimini artırabilir.

html
<!-- Express.js uygulamasında CDN kullanımı -->
<script src="https://cdn.example.com/jquery.min.js"></script>

Bu örnekte, jQuery kütüphanesinin bir CDN üzerinden servis edildiği görülmektedir.

WebSocket ve Gerçek Zamanlı Uygulamalar

Express.js, WebSocket protokolünü kullanarak gerçek zamanlı uygulamalar geliştirmenize olanak tanır. WebSocket iletişimi, kullanıcılar arasında anlık veri transferini mümkün kılar.

bash
npm install socket.io
javascript
const http = require('http');
const socketIO = require('socket.io');

const server = http.createServer(app);
const io = socketIO(server);

io.on('connection', (socket) => {
console.log('Kullanıcı bağlandı');

socket.on('disconnect', () => {
console.log('Kullanıcı ayrıldı');
});

socket.on('mesaj', (data) => {
console.log(`Gelen mesaj: ${data}`);
io.emit('mesaj', data);
});
});

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

Bu örnekte, socket.io modülü kullanılarak basit bir WebSocket uygulaması oluşturulmuştur.

Express.js ile İleri Düzey Konular

Express.js, çok sayıda ileri düzey konuyu içermektedir. Bunlar arasında Docker ve konteynerizasyon, mikroservis mimarileri, GraphQL entegrasyonu, test yazma ve CI/CD süreçleri gibi konular yer almaktadır. Bu konularda daha fazla bilgi edinmek ve pratiğe dökmek, Express.js becerilerinizi daha da artıracaktır.

Bu yazıda, Express.js ile ilgili pek çok konuya değindik. Ancak, web geliştirmenin dinamik doğası göz önüne alındığında, sürekli olarak yeni teknolojileri ve gelişmeleri takip etmek önemlidir. Kendinizi geliştirmeye ve deneyimlemeye devam ederek, Express.js üzerindeki yeteneklerinizi artırabilirsiniz. İyi şanslar ve keyifli kodlamalar!

Bir yanıt yazın

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