emirhanHCL 1
emirhanHCL
farkmt2official 1
farkmt2official
mannaxxx 1
mannaxxx
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Best Studio 1
Best Studio
TuZaKK 1
TuZaKK
Hikaye Ekle

[NODE JS] Query String Parametrelerini Okuma

  • Konuyu başlatan Konuyu başlatan Silverhand
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 1
  • Görüntüleme Görüntüleme 14

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!

nodejs.png


[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!
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst