farkmt2official 1
farkmt2official
mannaxxx 1
mannaxxx
Bvural41 1
Bvural41
Agora Metin2 1
Agora Metin2
berkmenoo 1
berkmenoo
Hikaye Ekle

[NODE JS] URL Modulu ile Adres Ayristirma

nodejs.png


[NODE JS] URL Modulu ile Adres Ayristirma​


Selam arkadaslar, bugun Node.js'in URL modulunu inceleyecegiz. Web sunucusu yazarken gelen isteklerin URL'lerini parse etmek cok temel bir ihtiyactir. URL modulü bize bu islem icin guclu araclar sunar. Ben her web projesinde bu modulu kullaniyorum ve dogrudan string manipulasyonu ile URL parse etmenin ne kadar hataya acik oldugunu bizzat yasadim.

URL Sinifi (WHATWG URL API)​


Node.js'te URL parse etmenin iki yolu var: eski url.parse() fonksiyonu ve yeni URL sinifi (WHATWG standardi). Ben artik hep URL sinifini kullaniyorum cunku tarayici ile uyumlu, daha tutarli ve eski API deprecated oldu. URL sinifi ile bir URL'i parcalarina ayirabilir, parametrelerini okuyabilir ve yeni URL'ler olusturabilirsiniz.

JavaScript:
// URL sinifi (WHATWG API) - modern yaklasim
const { URL, URLSearchParams } = require('url');

// URL parse etme
const adres = new URL('https://api.example.com:8080/v2/urunler/123?kategori=elektronik&sira=fiyat&sayfa=2#detay');

console.log('=== URL Parcalari ===');
console.log('href:     ', adres.href);
console.log('protocol: ', adres.protocol);   // https:
console.log('host:     ', adres.host);        // api.example.com:8080
console.log('hostname: ', adres.hostname);    // api.example.com
console.log('port:     ', adres.port);        // 8080
console.log('pathname: ', adres.pathname);    // /v2/urunler/123
console.log('search:   ', adres.search);      // ?kategori=elektronik&sira=fiyat&sayfa=2
console.log('hash:     ', adres.hash);        // #detay
console.log('origin:   ', adres.origin);      // https://api.example.com:8080

// Query parametrelerini okuma
console.log('\n=== Query Parametreleri ===');
console.log('kategori:', adres.searchParams.get('kategori'));
console.log('sira:    ', adres.searchParams.get('sira'));
console.log('sayfa:   ', adres.searchParams.get('sayfa'));
console.log('yok:     ', adres.searchParams.get('yok')); // null

// Tum parametreleri listele
console.log('\nTum parametreler:');
adres.searchParams.forEach((deger, anahtar) => {
    console.log(`  ${anahtar} = ${deger}`);
});

// URL olusturma
const yeniUrl = new URL('/api/kullanicilar', 'https://example.com');
yeniUrl.searchParams.set('sayfa', '1');
yeniUrl.searchParams.set('limit', '20');
yeniUrl.searchParams.set('arama', 'Node.js egitim');

console.log('\nOlusturulan URL:', yeniUrl.href);
// Ozel karakterler otomatik encode edilir

// Relative URL cozme
const temel = new URL('https://example.com/api/v1/');
const endpoint = new URL('kullanicilar/123', temel);
console.log('\nRelative URL:', endpoint.href);

Web Sunucusunda URL Kullanimi​


Gelen isteklerin URL'lerini parse etmek, routing yapmak icin temel gereksinimdir. req.url bize path ve query string'i verir ama bunu parse etmemiz gerekir. Asagida bunu nasil yapacagimizi gosteriyorum.

JavaScript:
const http = require('http');
const { URL } = require('url');

const sunucu = http.createServer((req, res) => {
    // req.url sadece path + query iceriyor, tam URL icin host eklemeliyiz
    const tamUrl = new URL(req.url, `http://${req.headers.host}`);

    const yol = tamUrl.pathname;
    const parametreler = tamUrl.searchParams;

    // Basit router
    const rotalar = {
        '/': () => {
            jsonCevap(res, 200, { mesaj: 'Ana sayfa' });
        },
        '/api/ara': () => {
            const arama = parametreler.get('q') || '';
            const sayfa = parseInt(parametreler.get('sayfa')) || 1;
            const limit = parseInt(parametreler.get('limit')) || 10;

            jsonCevap(res, 200, {
                arama,
                sayfa,
                limit,
                sonuclar: [`${arama} sonuc 1`, `${arama} sonuc 2`]
            });
        },
        '/api/urunler': () => {
            const kategori = parametreler.get('kategori');
            const minFiyat = parseFloat(parametreler.get('min')) || 0;
            const maxFiyat = parseFloat(parametreler.get('max')) || Infinity;
            const sira = parametreler.get('sira') || 'ad';

            jsonCevap(res, 200, {
                filtre: { kategori, minFiyat, maxFiyat, sira },
                urunler: []
            });
        }
    };

    // Dinamik rota eslestirme
    const urunDetayMatch = yol.match(/^\/api\/urunler\/(\d+)$/);
    if (urunDetayMatch) {
        const urunId = urunDetayMatch[1];
        jsonCevap(res, 200, { urunId, ad: `Urun ${urunId}` });
        return;
    }

    const rota = rotalar[yol];
    if (rota) {
        rota();
    } else {
        jsonCevap(res, 404, { hata: 'Sayfa bulunamadi' });
    }
});

function jsonCevap(res, kod, veri) {
    res.writeHead(kod, { 'Content-Type': 'application/json; charset=utf-8' });
    res.end(JSON.stringify(veri, null, 2));
}

sunucu.listen(3000, () => {
    console.log('Sunucu calisiyor: http://localhost:3000');
    console.log('\nOrnek URL\'ler:');
    console.log('  http://localhost:3000/api/ara?q=laptop&sayfa=1');
    console.log('  http://localhost:3000/api/urunler?kategori=elektronik&min=100&max=5000');
    console.log('  http://localhost:3000/api/urunler/42');
});

Dikkat Edilmesi Gerekenler​


URL parse ederken guvenlik acisindan dikkatli olun. Kullanicidan gelen URL'leri dogrudan kullanmak tehlikeli olabilir. URL injection ve open redirect gibi saldirilara karsi onlem alin. Kullanicinin girdigini validate edin ve sadece beklediginiz formatta URL'leri kabul edin. Benim tavsiyem, her zaman URL sinifini kullanin ve string birlestirme ile URL olusturmaktan kacinin. URL sinifi ozel karakterleri otomatik olarak encode eder ve bu sayede bir cok guvenlik sorununu onler. Siradaki konumuzda query string parametrelerine daha detayli bakacagiz!
 

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

Geri
Üst