Sorgu Dizeleri
Node.js'de Sorgu Dizeleri, URL üzerinden istemciden sunucuya veri aktarımını sağlayan kritik bir yapıdır. Genellikle ?
işareti ile başlar ve &
ile ayrılmış anahtar-değer çiftlerinden oluşur, örneğin ?isim=Ali&yas=25
. Sorgu dizeleri, dinamik web uygulamaları ve API geliştirme süreçlerinde kullanıcı parametrelerini almak, filtreleme ve özelleştirme yapmak için kullanılır.
Node.js uygulamalarında sorgu dizelerini etkin şekilde kullanmak, dilin temel sözdizimi, veri yapıları (objeler ve diziler), algoritmalar ve nesne yönelimli programlama (OOP) prensipleri hakkında derin bilgi gerektirir. Node.js’in dahili url
modülü ve URL
sınıfı, sorgu dizelerini parse etmek ve güvenli bir şekilde işlemek için güçlü araçlar sağlar.
Bu eğitimde okuyucu, sorgu dizelerini nasıl çıkaracağını, doğrulayacağını ve dönüştüreceğini öğrenecek, aynı zamanda bellek sızıntılarını önleme, hataları yönetme ve veri güvenliğini sağlama konularında en iyi uygulamaları keşfedecektir. Ayrıca, sorgu dizelerinin yazılım mimarisi içindeki rolü ve Node.js projelerinde nasıl ölçeklenebilir ve sürdürülebilir çözümler üretilebileceği üzerinde durulacaktır.
Temel Örnek
textconst http = require('http');
const url = require('url');
function islemQuery(query) {
const sonuc = {};
if (query.isim) sonuc.isim = query.isim.trim().toUpperCase();
if (query.yas) sonuc.yas = parseInt(query.yas, 10);
if (query.ulke) sonuc.ulke = query.ulke.trim().toLowerCase();
return sonuc;
}
const server = http.createServer((req, res) => {
const parsedUrl = url.parse(req.url, true);
const queryObject = parsedUrl.query;
const islenmisVeri = islemQuery(queryObject);
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify(islenmisVeri));
});
server.listen(3000, () => {
console.log('Sunucu çalışıyor: [http://localhost:3000/](http://localhost:3000/)');
});
Yukarıdaki örnekte, temel bir HTTP sunucusu oluşturulmuş ve sorgu dizeleri işlenmiştir. url.parse
fonksiyonu URL'i bir objeye dönüştürür ve parsedUrl.query
ile parametrelere erişilir. islemQuery
fonksiyonu, gelen veriyi işler: isim büyük harfe çevrilir, yaş sayıya dönüştürülür ve ülke küçük harfe dönüştürülür.
Bu yapı, verilerin güvenli ve modüler bir şekilde işlenmesini sağlar. İşleme mantığını ayrı bir fonksiyonda tutmak, kodun okunabilirliğini ve bakımını kolaylaştırır. Gerçek projelerde birden fazla parametre ve doğrulama ihtiyacı olduğunda bu yaklaşım kritik öneme sahiptir.
Pratik Örnek
textclass QueryHandler {
constructor(query) {
this.query = query;
this.sonuc = {};
}
dogrula() {
if (this.query.yas && isNaN(this.query.yas)) {
throw new Error('Yaş sayısal olmalıdır');
}
return this;
}
donustur() {
if (this.query.isim) this.sonuc.isim = this.query.isim.trim().toUpperCase();
if (this.query.yas) this.sonuc.yas = parseInt(this.query.yas, 10);
if (this.query.ulke) this.sonuc.ulke = this.query.ulke.trim().toLowerCase();
return this;
}
alSonuc() {
return this.sonuc;
}
}
const http = require('http');
const url = require('url');
const server = http.createServer((req, res) => {
try {
const parsedUrl = url.parse(req.url, true);
const queryObject = parsedUrl.query;
const handler = new QueryHandler(queryObject);
const islenmisVeri = handler.dogrula().donustur().alSonuc();
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify(islenmisVeri));
} catch (error) {
res.writeHead(400, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ error: error.message }));
}
});
server.listen(3000, () => {
console.log('Gelişmiş sunucu çalışıyor: [http://localhost:3000/](http://localhost:3000/)');
});
Bu ileri örnekte, QueryHandler
sınıfı sorgu dizelerini modüler bir şekilde işlemek için kullanılmıştır. dogrula
, donustur
ve alSonuc
metodları zincirleme (chaining) yapısı ile güvenli ve okunabilir bir iş akışı sunar. try/catch
bloğu, olası hataları yakalayarak sunucunun çökmesini engeller.
Bu yaklaşım, Node.js uygulamalarında modülerlik, yeniden kullanılabilirlik, güvenlik ve performans optimizasyonu sağlar. API ve büyük veri işleme gereksinimlerinde bu yapı, hatasız ve sürdürülebilir çözümler geliştirmek için idealdir.
Node.js’de Sorgu Dizeleri ile çalışırken dikkat edilmesi gerekenler:
- En iyi uygulamalar:
* Obje ve dizilerle veri yönetimi
* Tüm girişleri doğrulama ve temizleme
* Zincirleme metodlar ile modüler kod - Kaçınılması gereken hatalar:
* Hata yönetimini ihmal etmek → sunucu çökmesi ve bellek sızıntıları
* Senkron işleme → Event Loop'u bloke etme
* Veri tiplerini kontrol etmemek → çalışma zamanı hataları - Performans:
* Async/Await kullanarak asenkron işlem
* URL’i yalnızca bir kez parse etme
* Büyük veri setlerini optimize etme - Güvenlik:
* XSS ve injection saldırılarına karşı önlem
* Hassas verileri URL üzerinden göndermeme
📊 Referans Tablosu
Node.js Element/Concept | Description | Usage Example |
---|---|---|
url.parse | URL’i parse ederek sorgu dizelerine erişim | const query = url.parse(req.url, true).query; |
Chaining | Modüler ve zincirleme veri işleme | handler.dogrula().donustur().alSonuc(); |
Error Handling | Hata yönetimi ve güvenli cevap | try { ... } catch(error) { ... } |
Data Transformation | Veri dönüştürme ve standardizasyon | this.sonuc.isim = this.query.isim.toUpperCase(); |
OOP Principles | Sınıf kullanımıyla sorgu dizelerini yönetme | class QueryHandler { ... } |
Özet ve sonraki adımlar:
Sorgu Dizelerini öğrenmek, parametreleri verimli şekilde işlemek, performansı optimize etmek ve modüler kod yazmak için kritik öneme sahiptir. Anahtar konular: URL parse, doğrulama, veri dönüştürme, metod zinciri ve hata yönetimi.
Bir sonraki adımda Async/Await, veri tabanı entegrasyonu, yeniden kullanılabilir modüller ve ölçeklenebilir API geliştirme konularına odaklanılabilir. Düzenli pratik ile güvenlik, performans ve sürdürülebilirlik sağlanabilir. Node.js dokümantasyonu ve GitHub örnek projeleri ileri öğrenim için önerilen kaynaklardır.
🧠 Bilginizi Test Edin
Bilginizi Test Edin
Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör
📝 Talimatlar
- Her soruyu dikkatle okuyun
- Her soru için en iyi cevabı seçin
- Quiz'i istediğiniz kadar tekrar alabilirsiniz
- İlerlemeniz üstte gösterilecek