Türkiye'de ilk Mobil & PC Aynı Anda Metin2 Oyna. Triarchonline kalıcı ve uzun ömürlü yapısı ile 24 Temmuz'da açılıyor. | 1-99 Mobil Metin2 Triarch HEMEN TIKLA!
[NODE JS] Query String Parametrelerini Okuma
Merhaba arkadaslar, bugun URL'deki query string parametrelerini okuma ve isleme konusunu detayli inceleyecegiz. Query string'ler web gelistirmede en temel veri aktarim yontemlerinden biridir. Arama sorgusu, sayfalama, filtreleme, siralama gibi islemlerde surekli query string kullaniyoruz.
URLSearchParams Sinifi
URLSearchParams sinifi query string parametrelerini okumak, yazmak ve manipule etmek icin modern ve temiz bir API sunar. Ben artik querystring modulunu kullanmiyorum cunku URLSearchParams daha guclu ve tarayici ile uyumlu. Coklu deger destegi, otomatik encoding/decoding ve iterator destegi gibi ozellikleri var.
JavaScript:
const { URL, URLSearchParams } = require('url');
// URLSearchParams olusturma yollari
// 1. String'den
const params1 = new URLSearchParams('kategori=elektronik&marka=apple&marka=samsung');
// 2. Nesne'den
const params2 = new URLSearchParams({
arama: 'Node.js egitim',
sayfa: '1',
limit: '20'
});
// 3. Dizi ciftlerinden
const params3 = new URLSearchParams([
['renk', 'kirmizi'],
['renk', 'mavi'],
['beden', 'M']
]);
// Parametre okuma
console.log('=== Parametre Okuma ===');
console.log('get:', params1.get('kategori')); // 'elektronik'
console.log('getAll:', params1.getAll('marka')); // ['apple', 'samsung']
console.log('has:', params1.has('kategori')); // true
console.log('has:', params1.has('yok')); // false
// Iterasyon
console.log('\n=== Iterasyon ===');
for (const [anahtar, deger] of params1) {
console.log(` ${anahtar} = ${deger}`);
}
// Manipulasyon
console.log('\n=== Manipulasyon ===');
const params = new URLSearchParams();
params.set('sayfa', '1');
params.append('filtre', 'aktif');
params.append('filtre', 'premium');
console.log('Sonuc:', params.toString());
params.set('sayfa', '2'); // set mevcut degeri degistirir
console.log('Sayfa 2:', params.toString());
params.delete('filtre'); // Tum 'filtre' degerlerini siler
console.log('Filtresiz:', params.toString());
// Sort
const sirasiz = new URLSearchParams('z=1&a=2&m=3');
sirasiz.sort();
console.log('Siralanmis:', sirasiz.toString()); // a=2&m=3&z=1
// Otomatik encoding
const ozelKarakter = new URLSearchParams();
ozelKarakter.set('arama', 'Node.js & JavaScript ders notlari');
ozelKarakter.set('sehir', 'Istanbul');
console.log('\nEncoded:', ozelKarakter.toString());
console.log('Decoded:', ozelKarakter.get('arama'));
Sunucuda Query String Islem
Gercek bir web sunucusunda query string'ler en cok filtreleme, sayfalama ve arama islemleri icin kullanilir. Asagida bu islemleri gosteren kapsamli bir ornek hazirladim.
JavaScript:
const http = require('http');
const { URL } = require('url');
// Ornek veri
const urunler = [
{ id: 1, ad: 'Laptop', fiyat: 15000, kategori: 'elektronik', stok: true },
{ id: 2, ad: 'Telefon', fiyat: 8000, kategori: 'elektronik', stok: true },
{ id: 3, ad: 'Masa', fiyat: 2000, kategori: 'mobilya', stok: false },
{ id: 4, ad: 'Sandalye', fiyat: 1500, kategori: 'mobilya', stok: true },
{ id: 5, ad: 'Kulaklik', fiyat: 500, kategori: 'aksesuar', stok: true },
{ id: 6, ad: 'Mouse', fiyat: 300, kategori: 'aksesuar', stok: true },
{ id: 7, ad: 'Klavye', fiyat: 800, kategori: 'aksesuar', stok: false },
{ id: 8, ad: 'Monitor', fiyat: 5000, kategori: 'elektronik', stok: true }
];
function urunleriFiltrele(params) {
let sonuclar = [...urunler];
// Kategori filtresi
const kategori = params.get('kategori');
if (kategori) {
sonuclar = sonuclar.filter(u => u.kategori === kategori);
}
// Fiyat araligi
const minFiyat = parseFloat(params.get('min_fiyat')) || 0;
const maxFiyat = parseFloat(params.get('max_fiyat')) || Infinity;
sonuclar = sonuclar.filter(u => u.fiyat >= minFiyat && u.fiyat <= maxFiyat);
// Stok filtresi
const stok = params.get('stok');
if (stok !== null) {
sonuclar = sonuclar.filter(u => u.stok === (stok === 'true'));
}
// Arama
const arama = params.get('q');
if (arama) {
const aramaKucuk = arama.toLowerCase();
sonuclar = sonuclar.filter(u => u.ad.toLowerCase().includes(aramaKucuk));
}
// Siralama
const sira = params.get('sira') || 'id';
const yon = params.get('yon') || 'asc';
sonuclar.sort((a, b) => {
const degerA = a[sira];
const degerB = b[sira];
const carpan = yon === 'desc' ? -1 : 1;
if (typeof degerA === 'string') {
return degerA.localeCompare(degerB) * carpan;
}
return (degerA - degerB) * carpan;
});
// Sayfalama
const sayfa = parseInt(params.get('sayfa')) || 1;
const limit = parseInt(params.get('limit')) || 5;
const baslangic = (sayfa - 1) * limit;
const toplamSayfa = Math.ceil(sonuclar.length / limit);
const sayfaliSonuclar = sonuclar.slice(baslangic, baslangic + limit);
return {
toplam: sonuclar.length,
sayfa,
limit,
toplamSayfa,
urunler: sayfaliSonuclar
};
}
const sunucu = http.createServer((req, res) => {
const tamUrl = new URL(req.url, `http://${req.headers.host}`);
if (tamUrl.pathname === '/api/urunler' && req.method === 'GET') {
const sonuc = urunleriFiltrele(tamUrl.searchParams);
res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });
res.end(JSON.stringify(sonuc, null, 2));
} else {
res.writeHead(404);
res.end('Bulunamadi');
}
});
sunucu.listen(3000, () => {
console.log('Sunucu calisiyor: http://localhost:3000');
console.log('\nOrnek sorgular:');
console.log(' /api/urunler?kategori=elektronik');
console.log(' /api/urunler?min_fiyat=500&max_fiyat=5000&sira=fiyat&yon=desc');
console.log(' /api/urunler?q=lap&sayfa=1&limit=2');
});
Guvenlik ve Dogrulama
Query string parametrelerini kullanirken her zaman dogrulama yapin. Kullanicidan gelen her veri potansiyel olarak zararli olabilir. Sayisal degerleri parseInt/parseFloat ile cevirirken NaN kontrolu yapin. String degerleri sinirli uzunlukta tutun. SQL injection ve XSS gibi saldirilara karsi onlem alin. Benim tecrubem: asla kullanicidan gelen veriyi dogrudan veritabani sorgusuna veya HTML ciktisina koymayin. Her zaman sanitize edin ve parameterize sorgular kullanin. Sonraki konumuz POST body okuma!
Emeğiniz ve katkınız için teşekkür ederiz!
Konunuz gerekli incelemelerden geçerek onaylandı. Topluluğumuza katkılarınızın devamını bekliyoruz.
İyi forumlar!
Konunuz gerekli incelemelerden geçerek onaylandı. Topluluğumuza katkılarınızın devamını bekliyoruz.
İyi forumlar!

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 9
- Görüntüleme
- 473
- Cevaplar
- 2
- Görüntüleme
- 60
- Cevaplar
- 4
- Görüntüleme
- 2K
- Cevaplar
- 1
- Görüntüleme
- 548
