# 2026'da Node.js 24: URLPattern, Yetki Modeli ve Mülakat Soruları > Node.js 24 LTS, kararlı bir Yetki Modeli, global URLPattern, using/await using ile açık kaynak yönetimi ve V8 13.6 sunuyor. Üretim ortamları ve mülakatlar için önemli olan özelliklerin derinlemesine incelemesi. - Published: 2026-05-31 - Updated: 2026-05-31 - Author: SharpSkill - Tags: node.js, node.js 24, urlpattern, permissions, interview, v8, javascript - Reading time: 10 min --- Node.js 24, Krypton kod adıyla Ekim 2025'te LTS statüsüne ulaştı ve 2026'da önerilen üretim sürümü olmaya devam ediyor. Bu sürüm Yetki Modeli'ni (Permission Model) kararlı hale getiriyor, URLPattern'i global bir API olarak sunuyor, V8 13.6 aracılığıyla açık kaynak yönetimi sağlıyor ve npm'i 11. sürüme güncelliyor. Bu değişiklikler, backend uygulamalarının güvenlik, yönlendirme ve kaynak yaşam döngüsü konularını ele alış biçimini doğrudan etkiliyor. > **Node.js 24 LTS genel bakış** > > V8 13.6 ile `using`/`await using`, `--experimental-permission` yerine geçen kararlı `--permission` bayrağı, framework gerektirmeyen yönlendirme için global `URLPattern`, npm 11 ve varsayılan HTTP istemcisi olarak Undici 7. En son yama sürümü 24.16.0'dır (Mayıs 2026). ## Yetki Modeli: Deneysel Aşamadan Üretime Hazır Duruma Node.js 20, Yetki Modeli'ni `--experimental-permission` bayrağı arkasında tanıttı. Node.js 24, `experimental` önekini kaldırıyor. Bayrak artık basitçe `--permission` olarak adlandırılıyor ve çalışma zamanı, açıkça izin verilmedikçe dosya sistemi, ağ, alt süreçler, yerel eklentiler ve ortam değişkenlerine erişimi kısıtlıyor. Bu durum tedarik zinciri güvenliği açısından kritik önem taşıyor. Güvenliği aşılmış bir bağımlılık, süreç dar kapsamlı izinlerle `--permission` altında çalıştığında ağ üzerinden veri sızdıramaz veya rastgele dosyaları okuyamaz. ```bash # launch-secure.sh # Run an API server with minimal permissions node --permission \ --allow-fs-read=/app/src,/app/config \ --allow-fs-write=/app/uploads \ --allow-net=0.0.0.0:3000 \ server.js ``` Yukarıdaki süreç yalnızca kaynak ve yapılandırma dizinlerini okuyabilir, uploads klasörüne yazabilir ve 3000 portunu dinleyebilir. Bir alt süreç başlatma, yerel bir eklenti yükleme veya izin verilen kapsam dışındaki ortam değişkenlerine erişme girişimi `ERR_ACCESS_DENIED` hatası fırlatır. ### process.permission ile Çalışma Zamanı Yetki Kontrolleri `process.permission.has()` metodu çalışma zamanı introspeksiyonunu mümkün kılıyor. Uygulama kodu, kısıtlı işlemleri denemeden önce kendi yeteneklerini doğrulayabilir. ```javascript // permission-check.js // Verify permissions before performing restricted operations function ensureWriteAccess(directory) { if (!process.permission.has('fs.write', directory)) { throw new Error(`No write permission for ${directory}`); } } function canSpawnProcesses() { return process.permission.has('child'); } // Gracefully degrade when network access is restricted function fetchWithFallback(url, cachedData) { if (!process.permission.has('net')) { console.warn('Network access denied, using cached data'); return cachedData; } return fetch(url); } ``` Bu yaklaşım, hem korumalı alan hem de kısıtlanmamış ortamlarda çalışması gereken kütüphaneler için özellikle faydalıdır. Node.js 24.14.1 için Mart 2026 güvenlik yaması, `FileHandle.chmod()` ve `FileHandle.chown()` üzerindeki yetki kontrollerini atlayan bir güvenlik açığını da düzeltti ve çalışma zamanının güncel tutulmasının önemini bir kez daha vurguladı. ## Global URLPattern: Bağımlılık Gerektirmeyen Yerel Rota Eşleştirme Node.js 24, [URLPattern](https://developer.mozilla.org/en-US/docs/Web/API/URLPattern) API'sini global kapsamda sunuyor. Bu WHATWG standardı, adlandırılmış gruplar, opsiyonel segmentler ve doğrulama kısıtlamalarıyla URL'ler için özel olarak tasarlanmış, regex benzeri desen eşleştirmesi sağlıyor. Herhangi bir `import` veya `require` gerekmez. API, tarayıcılarda, Cloudflare Workers'ta ve Deno'da aynı şekilde çalışır ve bu da onu gerçek anlamda taşınabilir bir yönlendirme ilkesi haline getirir. ```javascript // router.js // Framework-free HTTP router using global URLPattern const routes = [ { pattern: new URLPattern({ pathname: '/api/users/:userId' }), handler: handleGetUser }, { pattern: new URLPattern({ pathname: '/api/users/:userId/posts/:postId' }), handler: handleGetPost }, { // Optional segment: matches /api/products and /api/products/:category pattern: new URLPattern({ pathname: '/api/products{/:category}?' }), handler: handleProducts } ]; function matchRoute(url) { for (const route of routes) { const result = route.pattern.exec(url); if (result) { return { handler: route.handler, params: result.pathname.groups }; } } return null; } // Usage with Node.js HTTP server import { createServer } from 'node:http'; const server = createServer((req, res) => { const url = new URL(req.url, `http://${req.headers.host}`); const match = matchRoute(url.href); if (match) { match.handler(req, res, match.params); } else { res.writeHead(404).end('Not Found'); } }); server.listen(3000); ``` ### Desen Doğrulama ve Gelişmiş Eşleştirme URLPattern, adlandırılmış gruplarda satır içi regex kısıtlamalarını, protokol eşleştirmesini ve sunucu adı filtrelemesini destekler. `test()` metodu, bir eşleşme sonuç nesnesi ayırmadan hızlı kontroller için boolean döndürür. ```javascript // url-validation.js // Validate URL segments with inline regex constraints const numericUser = new URLPattern({ pathname: '/users/:id([0-9]+)' }); numericUser.test('https://app.com/users/42'); // true numericUser.test('https://app.com/users/alice'); // false // Match by protocol and hostname const secureApi = new URLPattern({ protocol: 'https', hostname: 'api.example.com', pathname: '/v2/*' }); // Service worker-style routing for static assets vs API calls const staticAssets = new URLPattern({ pathname: '/static/*' }); const apiCalls = new URLPattern({ pathname: '/api/*' }); ``` Performans açısından URLPattern, ham verimlilik konusunda [find-my-way](https://github.com/delvedor/find-my-way) gibi optimize edilmiş yönlendiricilerle rekabet etmek için tasarlanmamıştır. Değeri, çalışma zamanları arasındaki taşınabilirlik ve yol ayrıştırma hatalarını ortadan kaldıran standartlaştırılmış bir API'de yatmaktadır. ## Açık Kaynak Yönetimi: using ve await using Node.js 24'teki V8 13.6, TC39 [Explicit Resource Management](https://github.com/tc39/proposal-explicit-resource-management) önerisini sunuyor. `using` ve `await using` bildirimleri, dosya tanıtıcıları, veritabanı bağlantıları, kilitler ve `Symbol.dispose` veya `Symbol.asyncDispose` uygulayan herhangi bir nesne için deterministik temizleme amacıyla `try/finally` bloklarının yerini alıyor. Node.js 24.2.0 itibarıyla `Symbol.dispose` ve `Symbol.asyncDispose` artık deneysel değildir. ```javascript // resource-management.js // Automatic cleanup with using and await using import { open } from 'node:fs/promises'; async function processCSV(path) { // File handle is automatically closed when scope exits await using file = await open(path, 'r'); const content = await file.readFile({ encoding: 'utf8' }); return content.split('\n').length; // file[Symbol.asyncDispose]() called here automatically } // Custom disposable resource function createDatabasePool(connectionString) { const pool = new Pool(connectionString); return { pool, query: (sql, params) => pool.query(sql, params), [Symbol.asyncDispose]: async () => { await pool.end(); console.log('Pool connections released'); } }; } async function runMigrations() { await using db = createDatabasePool(process.env.DB_URL); await db.query('CREATE TABLE IF NOT EXISTS migrations ...'); // Pool automatically closed, no try/finally needed } ``` ### Birden Fazla Kaynak için DisposableStack `DisposableStack` ve `AsyncDisposableStack`, birden fazla tek kullanımlık kaynağı bir araya getirir. Yığın atıldığında kaynaklar ters sırada serbest bırakılır ve bağımlılık zincirleri doğru şekilde ele alınır. ```javascript // disposable-stack.js // Manage multiple resources with AsyncDisposableStack async function processTransaction() { await using stack = new AsyncDisposableStack(); const connection = stack.use(await getConnection()); const transaction = stack.use(await connection.beginTransaction()); const tempFile = stack.use(await createTempFile()); await transaction.execute('INSERT INTO orders ...'); await tempFile.write('backup data'); // On scope exit: tempFile closed, transaction committed/rolled back, // connection returned to pool (reverse order) } ``` Bu yaklaşım, kaynak sızıntısı hatalarının tüm bir sınıfını ortadan kaldırır. `SuppressedError` türü, atma işleminin kendisinin istisna fırlattığı uç durumu ele alarak hem orijinal hatayı hem de atma hatasını korur. ## V8 13.6: Bilinmesi Gereken JavaScript Motoru Özellikleri Açık kaynak yönetiminin ötesinde, V8 13.6, [Node.js teknik mülakatlarında](/technologies/node-nestjs) karşılaşılan birkaç özellik sunuyor. **RegExp.escape**, kullanıcı girdilerini düzenli ifadelerde güvenli bir şekilde gömülmek üzere sanitize eder: ```javascript // regexp-escape.js // Safely embed user input in regular expressions const userInput = 'price: $9.99 (USD)'; const escaped = RegExp.escape(userInput); // escaped: 'price\:\ \$9\.99\ \(USD\)' const pattern = new RegExp(escaped); ``` **Float16Array**, ML çıkarımı veya WebGL tampon hazırlama gibi iş yükleri için `Float32Array`'e kıyasla bellek kullanımını yarıya indiren 16 bitlik kayan noktalı bir tipli dizi ekler: ```javascript // float16.js // Half-precision floating point for memory-sensitive workloads const weights = new Float16Array([0.5, -1.25, 3.14]); console.log(weights.byteLength); // 6 bytes instead of 12 with Float32Array ``` **Error.isError**, alanlar arası (iframes, vm bağlamları, işçi iş parçacıkları) çalışan güvenilir bir tür kontrolü sağlar: ```javascript // error-check.js // Cross-realm error detection const err = new TypeError('invalid input'); Error.isError(err); // true Error.isError({ message: 'fake' }); // false ``` ## AsyncLocalStorage Performans İyileştirmesi Node.js 24, `AsyncLocalStorage`'ı varsayılan olarak `AsyncContextFrame` uygulamasına geçiriyor. Önceki sürümler, her asenkron işleme ek yük ekleyen kanca tabanlı bir yaklaşım kullanıyordu. Yeni uygulama doğrudan V8'in mikro görev kuyruğuyla bütünleşerek yüksek eşzamanlılık uygulamalarında bağlam yayılımının performans maliyetini azaltıyor. Bu değişiklik mevcut kod için şeffaftır. İstek kapsamlı bağlam için `AsyncLocalStorage`'a dayanan [OpenTelemetry](https://opentelemetry.io/) gibi kütüphaneler ve loglama çerçeveleri, kod değişikliği gerektirmeden ölçülebilir verimlilik iyileştirmeleri elde eder. ```javascript // async-context.js // Request-scoped context with improved AsyncLocalStorage import { AsyncLocalStorage } from 'node:async_hooks'; const requestContext = new AsyncLocalStorage(); function handleRequest(req, res) { const context = { requestId: crypto.randomUUID(), startTime: performance.now() }; requestContext.run(context, async () => { // Context automatically propagated through all async operations const data = await fetchUserData(req.userId); const elapsed = performance.now() - requestContext.getStore().startTime; logger.info(`Request ${requestContext.getStore().requestId} completed in ${elapsed}ms`); res.json(data); }); } ``` ## Mülakat Soruları: Node.js 24 Edisyonu Bu sorular, 2026'da mülakatlarda hedeflenen özellikleri ve kalıpları yansıtıyor. Her cevap, yüzeysel bilgi yerine üretim düzeyinde anlayışı gösteriyor. **S1: Node.js Yetki Modeli, işletim sistemi düzeyindeki korumalı alandan nasıl farklıdır?** Yetki Modeli, işletim sistemi çekirdeği düzeyinde değil, Node.js çalışma zamanı düzeyinde çalışır. CLI bayraklarına dayalı olarak Node.js yerleşik API'lerine (`fs`, `net`, `child_process`) erişimi kısıtlar. İşletim sistemi düzeyinde korumalı alan (konteynerler, seccomp, AppArmor) çalışma zamanının altında çalışır ve sistem çağrılarını kısıtlar. Yetki Modeli, uygulama düzeyinde ayrıntılılık sağlayarak işletim sistemi korumalı alanını tamamlar. Önemli bir sınırlama: Node.js API'lerini atlayan yerel eklentiler için geçerli değildir ve yetki kontrolünden önce açılan mevcut dosya tanıtıcıları hala kullanılabilir. **S2: URLPattern, özel bir yönlendiriciye kıyasla ne zaman kötü bir tercih olur?** URLPattern, ara yazılım desteğinden, metot tabanlı yönlendirmeden (GET vs POST) ve rota sıralama garantilerinden yoksundur. Bir desen dizisi üzerinde iterasyon yaparken doğrusal eşleştirme gerçekleştirir; [find-my-way](https://github.com/delvedor/find-my-way) gibi yönlendiriciler ise O(log n) aramaları için radix ağaçları kullanır. URLPattern, paylaşılan istemci-sunucu doğrulama mantığı, service worker fetch işleyicileri ve prototipler için uygundur. Yüzlerce rotaya sahip üretim HTTP API'leri, özel bir yönlendiriciden fayda görür. **S3: `using` ile `await using` arasındaki farkı açıklayınız. Her biri ne zaman uygundur?** `using`, bloktan çıkıldığında `[Symbol.dispose]()` fonksiyonunu senkron olarak çağırır. Mutex'ler, senkron C++ eklentileri tarafından yönetilen dosya tanıtıcıları veya bellek içi önbellekler gibi kaynaklar için çalışır. `await using`, `[Symbol.asyncDispose]()` fonksiyonunu çağırır ve sonucu bekler; bu da veritabanı bağlantıları, HTTP oturumları veya asenkron I/O içeren herhangi bir temizleme için gereklidir. Asenkron bir kaynak için senkron `using` kullanmak, temizlemeyi sessizce atlar. **S4: `AsyncContextFrame`, `AsyncLocalStorage` performansını nasıl iyileştirir?** Önceki uygulamalar, bağlamı yaymak için asenkron kancalar (`init`, `before`, `after`, `destroy`) kullanıyordu ve her `Promise` çözümlemesine ve zamanlayıcı geri çağırmasına ek yük ekliyordu. `AsyncContextFrame`, bağlamı doğrudan V8'in dahili promise zincirinde saklar ve kanca ek yükünü ortadan kaldırır. İyileştirme, istek başına izleme ile binlerce eşzamanlı isteği ele alan HTTP sunucuları gibi yüksek `Promise` devir hızına sahip iş yüklerinde en belirgindir. **S5: Yetki Modelinde hangi güvenlik sınırlamaları mevcuttur?** Beş kritik sınırlama: (1) Sembolik bağlantılar, izin verilen yolların dışına geçebilir. (2) Yerel eklentiler, yetki kontrollerini tamamen atlar. (3) Bir üst süreçten devralınan veya `--permission` başlatılmadan önce açılan dosya tanıtıcıları kısıtlanmaz. (4) `--env-file` ve `--openssl-config` bayrakları, Yetki Modeli başlatılmadan önce dosyaları okur. (5) İşçi iş parçacığı yetkileri bağımsızdır ve ayrı ayrı yapılandırılmalıdır. `FileHandle.chmod()`/`FileHandle.chown()` için Mart 2026 CVE düzeltmesi, yeni API'lerin yetki uygulaması açısından sürekli denetlenmesi gerektiğini gösterdi. ## Sonuç - **Yükseltme yolu**: Node.js 24 LTS (Krypton), Nisan 2028'e kadar önerilen üretim sürümüdür. `--permission` bayrağı kod değişikliği gerektirmez, yalnızca dağıtım yapılandırması gerektirir - **URLPattern**, çalışma zamanları arası kod için hafif yönlendirme bağımlılıklarını ortadan kaldırır. Karmaşık ara yazılım zincirleri olan yüksek verimli HTTP API'leri için özel yönlendiriciler tercih edilmelidir - **`using`/`await using`**, kaynak yaşam döngüsü yönetimi için `try/finally`'ın yerini alır. Veritabanı havuz sarmalayıcılarına ve dosya tanıtıcı yardımcı araçlarına `[Symbol.asyncDispose]` ekleyerek başlanabilir - **AsyncLocalStorage performans iyileştirmeleri** otomatiktir. Yük altında istek kapsamlı loglama ve izlemenin karşılaştırmalı testi ile doğrulanabilir - **Mülakat hazırlığı**, Yetki Modeli'nin sınırlamalarını (sembolik bağlantılar, yerel eklentiler, devralınan dosya tanıtıcıları), URLPattern'in radix ağacı yönlendiricilerine karşı ödünleşimlerini ve senkron ile asenkron atma arasındaki ayrımı kapsamalıdır - Özel tek kullanımlık kaynaklar ve çalışma zamanı yetki kontrolleri uygulamak, [backend mülakat oturumlarında](/technologies/node-nestjs/interview-questions/authentication-jwt) Node.js 24 özelliklerine hakimiyet göstermenin etkili bir yoludur --- Source: SharpSkill (https://sharpskill.dev), tech interview preparation for your real stack. HTML version of this page: https://sharpskill.dev/tr/blog/node-nestjs/nodejs-24-urlpattern-permissions-interview-questions