{"id":37138,"date":"2025-12-27T23:30:46","date_gmt":"2025-12-27T20:30:46","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/node-js-http-sunucusu-ile-kendi-moduler-http-uygulamanizi-gelistirme-rehberi\/"},"modified":"2025-12-27T23:30:46","modified_gmt":"2025-12-27T20:30:46","slug":"node-js-http-sunucusu-ile-kendi-moduler-http-uygulamanizi-gelistirme-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/node-js-http-sunucusu-ile-kendi-moduler-http-uygulamanizi-gelistirme-rehberi\/","title":{"rendered":"Node.js HTTP Sunucusu ile Kendi Mod\u00fcler HTTP Uygulaman\u0131z\u0131 Geli\u015ftirme Rehberi"},"content":{"rendered":"<h2>Node.js HTTP Sunucusu ile Kendi Mod\u00fcler HTTP Uygulaman\u0131z\u0131 Geli\u015ftirme Rehberi<\/h2>\n<p>Node.js, asenkron ve olay tabanl\u0131 mimarisi sayesinde sunucu taraf\u0131 uygulamalar geli\u015ftirmek i\u00e7in pop\u00fcler bir platform haline gelmi\u015ftir. Genellikle Express.js gibi framework&#8217;ler arac\u0131l\u0131\u011f\u0131yla web uygulamalar\u0131 geli\u015ftirilse de, Node.js&#8217;in kendi b\u00fcnyesindeki <code>http<\/code> mod\u00fcl\u00fc, HTTP sunucular\u0131n\u0131 en temel seviyede anlamak ve kontrol etmek i\u00e7in g\u00fc\u00e7l\u00fc bir temel sunar. Bu makale, Node.js&#8217;in yerle\u015fik HTTP sunucusunu kullanarak nas\u0131l mod\u00fcler ve \u00f6l\u00e7eklenebilir bir HTTP uygulamas\u0131 olu\u015fturabilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacakt\u0131r. Kendi HTTP mod\u00fcl\u00fcn\u00fcz\u00fc in\u015fa etmek, framework&#8217;lerin arkas\u0131ndaki mekanizmalar\u0131 kavraman\u0131za ve daha optimize edilmi\u015f, ihtiyaca \u00f6zel \u00e7\u00f6z\u00fcmler geli\u015ftirmenize olanak tan\u0131r.<\/p>\n<h3>Node.js HTTP Sunucusuna Derinlemesine Bak\u0131\u015f<\/h3>\n<p>Node.js, JavaScript&#8217;i sunucu taraf\u0131nda \u00e7al\u0131\u015ft\u0131rmam\u0131z\u0131 sa\u011flayan bir \u00e7al\u0131\u015fma zaman\u0131 ortam\u0131d\u0131r. Web uygulamalar\u0131n\u0131n temelini olu\u015fturan HTTP protokol\u00fc ile etkile\u015fim kurmak i\u00e7in g\u00fc\u00e7l\u00fc ve esnek bir <code>http<\/code> mod\u00fcl\u00fc sunar. Bu b\u00f6l\u00fcm, bu mod\u00fcl\u00fcn temel bile\u015fenlerini ve nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 detayland\u0131racakt\u0131r.<\/p>\n<h4><code>http<\/code> Mod\u00fcl\u00fcn\u00fcn Temelleri<\/h4>\n<p><code>http<\/code> mod\u00fcl\u00fc, Node.js&#8217;in \u00e7ekirdek mod\u00fcllerinden biridir ve herhangi bir ek kurulum gerektirmez. Bu mod\u00fcl, HTTP istemcisi ve sunucusu i\u015flevselli\u011fi sa\u011flar. Bir web sunucusu olu\u015fturmak i\u00e7in genellikle <code>http.createServer()<\/code> metodu kullan\u0131l\u0131rken, harici bir API&#8217;ye istek g\u00f6ndermek i\u00e7in <code>http.request()<\/code> veya <code>http.get()<\/code> metotlar\u0131 tercih edilir. Kendi HTTP mod\u00fcl\u00fcm\u00fcz\u00fc olu\u015ftururken, bu temel i\u015flevsellikleri kullanarak isteklere yan\u0131t verece\u011fiz ve sunucumuzun davran\u0131\u015f\u0131n\u0131 \u00f6zelle\u015ftirece\u011fiz.<\/p>\n<h4><code>createServer<\/code> Metodu ve Olay Tabanl\u0131 Mimari<\/h4>\n<p><code>http.createServer()<\/code> metodu, bir HTTP sunucusu nesnesi d\u00f6nd\u00fcr\u00fcr. Bu metoda genellikle bir geri \u00e7a\u011f\u0131rma (callback) fonksiyonu arg\u00fcman olarak verilir. Bu geri \u00e7a\u011f\u0131rma fonksiyonu, sunucuya her yeni istek geldi\u011finde \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r ve iki ana parametre al\u0131r: <code>request<\/code> (gelen istek) ve <code>response<\/code> (g\u00f6nderilecek yan\u0131t). Node.js&#8217;in olay tabanl\u0131 mimarisi sayesinde, bu sunucu nesnesi \u00e7e\u015fitli olaylar\u0131 (\u00f6rne\u011fin, <code>'request'<\/code>, <code>'connection'<\/code>, <code>'close'<\/code>) dinleyebilir ve bu olaylar tetiklendi\u011finde belirli fonksiyonlar\u0131 \u00e7al\u0131\u015ft\u0131rabilir.<\/p>\n<pre><code class=\"language-javascript\">\nconst http = require('http');\n\nconst server = http.createServer((req, res) => {\n  \/\/ Her istek geldi\u011finde bu fonksiyon \u00e7al\u0131\u015f\u0131r\n  console.log(<code>Gelen \u0130stek: ${req.method} ${req.url}<\/code>);\n  res.statusCode = 200;\n  res.setHeader('Content-Type', 'text\/plain');\n  res.end('Merhaba Dunya!\\n');\n});\n\nconst PORT = 3000;\nserver.listen(PORT, () => {\n  console.log(<code>Sunucu http:\/\/localhost:${PORT} adresinde \u00e7al\u0131\u015f\u0131yor<\/code>);\n});\n<\/pre>\n<p><\/code><\/p>\n<h4><code>request<\/code> ve <code>response<\/code> Objelerinin Anatomisi<\/h4>\n<p>Geri \u00e7a\u011f\u0131rma fonksiyonundaki <code>req<\/code> (<code>IncomingMessage<\/code>) ve <code>res<\/code> (<code>ServerResponse<\/code>) objeleri, gelen iste\u011fi i\u015flemek ve yan\u0131t\u0131 olu\u015fturmak i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<ul>\n<li><strong><code>request<\/code> (<code>IncomingMessage<\/code>) Objesi:<\/strong> Gelen HTTP iste\u011fi hakk\u0131nda t\u00fcm bilgileri i\u00e7erir. \u00d6nemli \u00f6zellikleri aras\u0131nda <code>req.url<\/code> (iste\u011fin URL'si), <code>req.method<\/code> (HTTP metodu: GET, POST vb.), <code>req.headers<\/code> (istek ba\u015fl\u0131klar\u0131) ve <code>req.body<\/code> (istek g\u00f6vdesi, ak\u0131\u015f olarak okunur) bulunur.<\/li>\n<li><strong><code>response<\/code> (<code>ServerResponse<\/code>) Objesi:<\/strong> \u0130stemciye geri g\u00f6nderilecek yan\u0131t\u0131 olu\u015fturmak i\u00e7in kullan\u0131l\u0131r. \u00d6nemli metotlar\u0131 aras\u0131nda <code>res.statusCode<\/code> (HTTP durum kodu), <code>res.setHeader()<\/code> (yan\u0131t ba\u015fl\u0131\u011f\u0131 ayarlama) ve <code>res.end()<\/code> (yan\u0131t\u0131 sonland\u0131rma ve g\u00f6nderme) yer al\u0131r.<\/li>\n<\/ul>\n<h3>Basit Bir HTTP Mod\u00fcl\u00fc Yap\u0131land\u0131rma<\/h3>\n<p>\u015eimdi temel bilgileri edindi\u011fimize g\u00f6re, Node.js'in <code>http<\/code> mod\u00fcl\u00fcn\u00fc kullanarak basit bir HTTP mod\u00fcl\u00fc olu\u015fturmaya ba\u015flayabiliriz. Bu b\u00f6l\u00fcm, temel bir sunucu kurulumundan, gelen istekleri i\u015flemeye ve URL ile HTTP metotlar\u0131n\u0131 kullanmaya kadar olan ad\u0131mlar\u0131 kapsayacakt\u0131r.<\/p>\n<h4>Temel Sunucu Olu\u015fturma ve Dinleme<\/h4>\n<p>Yukar\u0131daki \u00f6rnekte g\u00f6sterildi\u011fi gibi, <code>http.createServer()<\/code> ile bir sunucu olu\u015fturup <code>server.listen()<\/code> ile belirli bir portta dinlemeye ba\u015flamak, her Node.js HTTP uygulamas\u0131n\u0131n ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r. Sunucuyu dinlemeye almak, gelen ba\u011flant\u0131lar\u0131 kabul etmeye haz\u0131r hale getirmek anlam\u0131na gelir. Genellikle <code>localhost<\/code> (127.0.0.1) ve belirli bir port (\u00f6rne\u011fin 3000 veya 8080) kullan\u0131l\u0131r.<\/p>\n<h4>\u0130stekleri \u0130\u015fleme ve Yan\u0131t G\u00f6nderme<\/h4>\n<p>Sunucuya gelen her istek, <code>createServer<\/code> metoduna verilen geri \u00e7a\u011f\u0131rma fonksiyonu taraf\u0131ndan i\u015flenir. Bu fonksiyon i\u00e7inde, <code>request<\/code> objesinden gelen bilgileri okuyarak (URL, metot, ba\u015fl\u0131klar vb.) ve <code>response<\/code> objesini kullanarak uygun bir yan\u0131t olu\u015ftururuz. Yan\u0131t\u0131n i\u00e7eri\u011fini (<code>Content-Type<\/code>) ve durum kodunu (<code>statusCode<\/code>) ayarlamak \u00f6nemlidir.<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ ... (http mod\u00fcl\u00fc ve server.listen k\u0131sm\u0131)\n\nconst server = http.createServer((req, res) => {\n  if (req.url === '\/') {\n    res.statusCode = 200;\n    res.setHeader('Content-Type', 'text\/html');\n    res.end('<h1>Ana Sayfa<\/h1><p>Ho\u015f geldiniz!<\/p>');\n  } else if (req.url === '\/hakkinda') {\n    res.statusCode = 200;\n    res.setHeader('Content-Type', 'text\/html');\n    res.end('<h1>Hakk\u0131m\u0131zda<\/h1><p>Bu bir Node.js HTTP mod\u00fcl\u00fcd\u00fcr.<\/p>');\n  } else {\n    res.statusCode = 404;\n    res.setHeader('Content-Type', 'text\/plain');\n    res.end('404 Sayfa Bulunamad\u0131');\n  }\n});\n<\/pre>\n<p><\/code><\/p>\n<h4>URL ve HTTP Metotlar\u0131n\u0131 Kullanma<\/h4>\n<p><code>req.url<\/code> ve <code>req.method<\/code>, gelen iste\u011fi farkl\u0131 yollarla i\u015flemek i\u00e7in en temel ara\u00e7lard\u0131r. <code>req.url<\/code>, iste\u011fin yolunu (path) ve sorgu dizgisini (query string) i\u00e7erir. <code>req.method<\/code> ise iste\u011fin HTTP metodunu (GET, POST, PUT, DELETE vb.) belirtir. Bu bilgilerle, uygulaman\u0131z\u0131n farkl\u0131 URL'lere ve farkl\u0131 HTTP metotlar\u0131na nas\u0131l yan\u0131t verece\u011fini belirleyebilirsiniz. \u00d6rne\u011fin, <code>\/api\/users<\/code> adresine gelen bir GET iste\u011fi kullan\u0131c\u0131 listesini d\u00f6nd\u00fcr\u00fcrken, ayn\u0131 adrese gelen bir POST iste\u011fi yeni bir kullan\u0131c\u0131 olu\u015fturabilir.<\/p>\n<h3>Geli\u015fmi\u015f \u0130stek Y\u00f6nlendirme (Routing) Mekanizmalar\u0131<\/h3>\n<p>Uygulamalar b\u00fcy\u00fcd\u00fck\u00e7e, her URL'yi ve metodu if-else bloklar\u0131yla y\u00f6netmek s\u00fcrd\u00fcr\u00fclemez hale gelir. Bu noktada, istek y\u00f6nlendirme (routing) mekanizmalar\u0131na ihtiya\u00e7 duyar\u0131z. Bu b\u00f6l\u00fcm, kendi basit y\u00f6nlendirme \u00e7\u00f6z\u00fcm\u00fcm\u00fcz\u00fc nas\u0131l olu\u015fturaca\u011f\u0131m\u0131z\u0131 ve parametreli URL'leri nas\u0131l i\u015fleyece\u011fimizi anlat\u0131r.<\/p>\n<h4>Manuel Y\u00f6nlendirme Yakla\u015f\u0131mlar\u0131<\/h4>\n<p>Yukar\u0131daki \u00f6rnekte g\u00f6sterilen if-else zinciri, manuel y\u00f6nlendirmeye bir \u00f6rnektir. Daha karma\u015f\u0131k senaryolarda, bu yap\u0131y\u0131 daha d\u00fczenli hale getirmek i\u00e7in bir dizi obje veya fonksiyon kullanabiliriz. \u00d6rne\u011fin, her bir rotay\u0131 (route) bir obje olarak tan\u0131mlay\u0131p, bu objeleri bir dizide tutarak istek geldi\u011finde uygun rotay\u0131 arayabiliriz.<\/p>\n<h4>Basit Bir Router Mod\u00fcl\u00fc Olu\u015fturma<\/h4>\n<p>Uygulaman\u0131n ana dosyas\u0131n\u0131 temiz tutmak i\u00e7in, y\u00f6nlendirme mant\u0131\u011f\u0131n\u0131 ayr\u0131 bir mod\u00fcle ta\u015f\u0131mak iyi bir pratiktir. Bu mod\u00fcl, gelen iste\u011fin URL'sini ve metodunu alarak, uygun i\u015fleyici fonksiyonu (handler) bulur ve \u00e7al\u0131\u015ft\u0131r\u0131r.<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ router.js\nconst routes = {\n  'GET \/': (req, res) => {\n    res.statusCode = 200;\n    res.setHeader('Content-Type', 'text\/html');\n    res.end('<h1>Ana Sayfa<\/h1>');\n  },\n  'GET \/api\/users': (req, res) => {\n    res.statusCode = 200;\n    res.setHeader('Content-Type', 'application\/json');\n    res.end(JSON.stringify([{ id: 1, name: 'Ali' }, { id: 2, name: 'Veli' }]));\n  },\n  'POST \/api\/users': (req, res) => {\n    let body = '';\n    req.on('data', chunk => {\n      body += chunk.toString();\n    });\n    req.on('end', () => {\n      const newUser = JSON.parse(body);\n      res.statusCode = 201;\n      res.setHeader('Content-Type', 'application\/json');\n      res.end(JSON.stringify({ message: 'Kullan\u0131c\u0131 olu\u015fturuldu', user: newUser }));\n    });\n  }\n};\n\nfunction handleRoute(req, res) {\n  const routeKey = <code>${req.method} ${req.url}<\/code>;\n  const handler = routes[routeKey];\n\n  if (handler) {\n    handler(req, res);\n  } else {\n    res.statusCode = 404;\n    res.setHeader('Content-Type', 'text\/plain');\n    res.end('404 Sayfa Bulunamad\u0131');\n  }\n}\n\nmodule.exports = handleRoute;\n\n\/\/ server.js\nconst http = require('http');\nconst router = require('.\/router'); \/\/ Kendi router mod\u00fcl\u00fcm\u00fcz\u00fc import ediyoruz\n\nconst server = http.createServer(router); \/\/ router fonksiyonunu do\u011frudan callback olarak veriyoruz\n\nconst PORT = 3000;\nserver.listen(PORT, () => {\n  console.log(<code>Sunucu http:\/\/localhost:${PORT} adresinde \u00e7al\u0131\u015f\u0131yor<\/code>);\n});\n<\/pre>\n<p><\/code><\/p>\n<h4>Parametreli URL'ler ve Sorgu Dizileri<\/h4>\n<p>Ger\u00e7ek d\u00fcnya uygulamalar\u0131nda URL'ler genellikle parametreler i\u00e7erir (\u00f6rn: <code>\/users\/123<\/code>). Kendi router'\u0131m\u0131zda bu t\u00fcr parametreleri yakalamak i\u00e7in URL ayr\u0131\u015ft\u0131rma (parsing) i\u015flemleri yapmam\u0131z gerekir. Node.js'in <code>url<\/code> mod\u00fcl\u00fc bu konuda yard\u0131mc\u0131 olabilir. Ayr\u0131ca, <code>req.url<\/code> i\u00e7inde yer alan sorgu dizgilerini (<code>?name=Ali&age=30<\/code>) ayr\u0131\u015ft\u0131rmak i\u00e7in <code>URLSearchParams<\/code> API'si veya <code>querystring<\/code> mod\u00fcl\u00fc kullan\u0131labilir.<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ router.js (g\u00fcncellenmi\u015f)\nconst url = require('url');\n\nconst routes = {\n  \/\/ ... di\u011fer rotalar\n  'GET \/api\/users\/:id': (req, res) => {\n    const parsedUrl = url.parse(req.url, true);\n    const pathSegments = parsedUrl.pathname.split('\/').filter(Boolean); \/\/ ['api', 'users', '123']\n    const userId = pathSegments[2]; \/\/ '123'\n\n    \/\/ userId ile ilgili i\u015flemi yap\n    res.statusCode = 200;\n    res.setHeader('Content-Type', 'application\/json');\n    res.end(JSON.stringify({ id: userId, name: <code>Kullan\u0131c\u0131 ${userId}<\/code> }));\n  }\n};\n\nfunction handleRoute(req, res) {\n  const parsedUrl = url.parse(req.url, true);\n  const path = parsedUrl.pathname;\n  const method = req.method;\n\n  \/\/ Dinamik rotalar\u0131 kontrol etmek i\u00e7in daha karma\u015f\u0131k bir mant\u0131k\n  for (const routeKey in routes) {\n    const [routeMethod, routePath] = routeKey.split(' ');\n    if (routeMethod === method) {\n      \/\/ Basit bir regex veya string kar\u015f\u0131la\u015ft\u0131rma ile parametreleri yakalama\n      const routeRegex = new RegExp(<code>^${routePath.replace(\/:[a-zA-Z0-9_]+\/g, '([a-zA-Z0-9_]+)')}$<\/code>);\n      const match = path.match(routeRegex);\n      if (match) {\n        \/\/ Parametreleri req objesine ekleyebiliriz\n        \/\/ req.params = { id: match[1] }; \/\/ \u00d6rnek\n        routes[routeKey](req, res);\n        return;\n      }\n    }\n  }\n\n  \/\/ E\u011fer e\u015fle\u015fen rota bulunamazsa\n  res.statusCode = 404;\n  res.setHeader('Content-Type', 'text\/plain');\n  res.end('404 Sayfa Bulunamad\u0131');\n}\n\/\/ ...\n<\/pre>\n<p><\/code><\/p>\n<h3>Middleware Kavram\u0131 ve Uygulamas\u0131<\/h3>\n<p>Middleware (ara yaz\u0131l\u0131m), bir iste\u011fin sunucuya ula\u015fmas\u0131ndan ve bir yan\u0131t\u0131n istemciye g\u00f6nderilmesinden \u00f6nce veya sonra belirli i\u015flemleri ger\u00e7ekle\u015ftiren fonksiyonlard\u0131r. Kimlik do\u011frulama, loglama, veri ayr\u0131\u015ft\u0131rma gibi g\u00f6revler i\u00e7in \u00e7ok kullan\u0131\u015fl\u0131d\u0131rlar. Express.js gibi framework'lerde yayg\u0131n olarak kullan\u0131l\u0131rken, kendi HTTP mod\u00fcl\u00fcm\u00fczde de benzer bir yap\u0131y\u0131 olu\u015fturabiliriz.<\/p>\n<h4>Middleware Nedir ve Neden Kullan\u0131l\u0131r?<\/h4>\n<p>Middleware fonksiyonlar\u0131, gelen iste\u011fi i\u015fleyen ana i\u015fleyiciye ula\u015fmadan \u00f6nce veya sonra \u00e7al\u0131\u015f\u0131r. Her middleware fonksiyonu, iste\u011fi i\u015fleyebilir, yan\u0131t\u0131 de\u011fi\u015ftirebilir ve iste\u011fi bir sonraki middleware'e veya nihai i\u015fleyiciye iletebilir. Bu, kod tekrar\u0131n\u0131 azalt\u0131r, mod\u00fclerli\u011fi art\u0131r\u0131r ve uygulaman\u0131n farkl\u0131 katmanlar\u0131nda ortak i\u015flevselli\u011fi kolayca y\u00f6netmeyi sa\u011flar.<\/p>\n<ul>\n<li><strong>Loglama:<\/strong> Her iste\u011fi kaydetmek.<\/li>\n<li><strong>Kimlik Do\u011frulama:<\/strong> Kullan\u0131c\u0131n\u0131n yetkili olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek.<\/li>\n<li><strong>V\u00fccut Ayr\u0131\u015ft\u0131rma (Body Parsing):<\/strong> POST\/PUT isteklerindeki JSON veya form verilerini ayr\u0131\u015ft\u0131rmak.<\/li>\n<li><strong>Hata Y\u00f6netimi:<\/strong> Uygulama genelinde hatalar\u0131 yakalamak.<\/li>\n<\/ul>\n<h4>Kendi Basit Middleware Fonksiyonlar\u0131n\u0131z\u0131 Yazma<\/h4>\n<p>Bir middleware fonksiyonu genellikle <code>(req, res, next)<\/code> parametrelerini al\u0131r. <code>req<\/code> ve <code>res<\/code> bilinen istek ve yan\u0131t objeleridir. <code>next<\/code> ise, bir sonraki middleware fonksiyonunu veya nihai rota i\u015fleyicisini \u00e7a\u011f\u0131rmak i\u00e7in kullan\u0131lan bir fonksiyondur. <code>next()<\/code> \u00e7a\u011fr\u0131lmazsa, istek zinciri durur.<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ loggerMiddleware.js\nfunction loggerMiddleware(req, res, next) {\n  console.log(<code>[${new Date().toISOString()}] ${req.method} ${req.url}<\/code>);\n  next(); \/\/ Bir sonraki middleware'e veya rota i\u015fleyicisine ge\u00e7\n}\nmodule.exports = loggerMiddleware;\n\n\/\/ authMiddleware.js\nfunction authMiddleware(req, res, next) {\n  const token = req.headers.authorization;\n  if (token === 'Bearer mysecrettoken') {\n    \/\/ req.user = { id: 1, role: 'admin' }; \/\/ Kullan\u0131c\u0131 bilgilerini ekleyebiliriz\n    next();\n  } else {\n    res.statusCode = 401;\n    res.setHeader('Content-Type', 'text\/plain');\n    res.end('Yetkisiz Eri\u015fim');\n  }\n}\nmodule.exports = authMiddleware;\n<\/pre>\n<p><\/code><\/p>\n<h4>Middleware Zincirleri Olu\u015fturma<\/h4>\n<p>Birden fazla middleware'i s\u0131rayla \u00e7al\u0131\u015ft\u0131rmak i\u00e7in bir zincir olu\u015fturabiliriz. Ana sunucu fonksiyonumuzda, her iste\u011fi bu middleware zincirinden ge\u00e7irebiliriz.<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ app.js (ana uygulama dosyas\u0131)\nconst http = require('http');\nconst url = require('url');\nconst loggerMiddleware = require('.\/loggerMiddleware');\nconst authMiddleware = require('.\/authMiddleware');\n\n\/\/ Basit bir middleware y\u00f6neticisi\nconst middlewares = [];\n\nfunction use(middleware) {\n  middlewares.push(middleware);\n}\n\n\/\/ Middleware'leri tan\u0131mla\nuse(loggerMiddleware);\n\/\/ use(authMiddleware); \/\/ \u0130ste\u011fe ba\u011fl\u0131 olarak kimlik do\u011frulama ekle\n\nconst routes = {\n  'GET \/': (req, res) => {\n    res.statusCode = 200;\n    res.setHeader('Content-Type', 'text\/html');\n    res.end('<h1>Ana Sayfa<\/h1>');\n  },\n  'GET \/protected': (req, res) => {\n    \/\/ Bu rotaya eri\u015fim i\u00e7in authMiddleware'den ge\u00e7mek gerekir\n    res.statusCode = 200;\n    res.setHeader('Content-Type', 'text\/plain');\n    res.end('Korumal\u0131 Alan!');\n  }\n};\n\nconst server = http.createServer((req, res) => {\n  let middlewareIndex = 0;\n\n  const next = () => {\n    if (middlewareIndex < middlewares.length) {\n      middlewares[middlewareIndex++](req, res, next);\n    } else {\n      \/\/ T\u00fcm middleware'ler tamamland\u0131, \u015fimdi rotay\u0131 i\u015fle\n      const parsedUrl = url.parse(req.url, true);\n      const routeKey = <code>${req.method} ${parsedUrl.pathname}<\/code>;\n      const handler = routes[routeKey];\n\n      if (handler) {\n        handler(req, res);\n      } else {\n        res.statusCode = 404;\n        res.setHeader('Content-Type', 'text\/plain');\n        res.end('404 Sayfa Bulunamad\u0131');\n      }\n    }\n  };\n  next(); \/\/ Middleware zincirini ba\u015flat\n});\n\nconst PORT = 3000;\nserver.listen(PORT, () => {\n  console.log(<code>Sunucu http:\/\/localhost:${PORT} adresinde \u00e7al\u0131\u015f\u0131yor<\/code>);\n});\n<\/pre>\n<p><\/code><\/p>\n<h3>Mod\u00fcler Yap\u0131y\u0131 G\u00fc\u00e7lendirme ve Bak\u0131m<\/h3>\n<p>B\u00fcy\u00fck uygulamalarda t\u00fcm kodun tek bir dosyada olmas\u0131 y\u00f6netilemez hale gelir. Node.js'in mod\u00fcl sistemi (CommonJS), kodu ayr\u0131 dosyalara b\u00f6lerek daha d\u00fczenli, okunabilir ve bak\u0131m\u0131 kolay bir yap\u0131 olu\u015fturmam\u0131z\u0131 sa\u011flar.<\/p>\n<h4>Kodun Mod\u00fcllere Ayr\u0131lmas\u0131<\/h4>\n<p>Her bir i\u015flevselli\u011fi (\u00f6rne\u011fin, router, middleware, veritaban\u0131 i\u015flemleri, yard\u0131mc\u0131 fonksiyonlar) kendi ayr\u0131 dosyas\u0131na ta\u015f\u0131mak en iyi yakla\u015f\u0131md\u0131r. Her dosya, <code>module.exports<\/code> kullanarak d\u0131\u015far\u0131ya bir fonksiyon, obje veya s\u0131n\u0131f ihra\u00e7 eder. Di\u011fer dosyalar ise <code>require()<\/code> fonksiyonu ile bu ihra\u00e7 edilen mod\u00fclleri i\u00e7e aktar\u0131r.<\/p>\n<p>\u00d6rne\u011fin, <code>routes.js<\/code>, <code>middlewares.js<\/code>, <code>controllers.js<\/code> gibi dosyalar olu\u015fturarak kodu daha iyi organize edebiliriz. Bu, her bir mod\u00fcl\u00fcn belirli bir sorumlulu\u011fa sahip olmas\u0131n\u0131 sa\u011flar ve uygulaman\u0131n genel mimarisini basitle\u015ftirir.<\/p>\n<h4>Farkl\u0131 Mod\u00fclleri Birle\u015ftirme<\/h4>\n<p>Ana uygulama dosyan\u0131z (genellikle <code>app.js<\/code> veya <code>server.js<\/code>), t\u00fcm bu mod\u00fclleri bir araya getiren orkestrat\u00f6r g\u00f6revi g\u00f6r\u00fcr. Burada middleware'ler uygulan\u0131r, rotalar tan\u0131mlan\u0131r ve sunucu ba\u015flat\u0131l\u0131r. Bu yap\u0131, her bir bile\u015fenin ba\u011f\u0131ms\u0131z olarak geli\u015ftirilip test edilmesine olanak tan\u0131r.<\/p>\n<h4>Yap\u0131sal En \u0130yi Uygulamalar<\/h4>\n<ul>\n<li><strong>Sorumluluklar\u0131n Ayr\u0131m\u0131 (Separation of Concerns):<\/strong> Her mod\u00fcl\u00fcn tek bir i\u015fi yapmas\u0131n\u0131 sa\u011flay\u0131n.<\/li>\n<li><strong>Tutarl\u0131 \u0130simlendirme:<\/strong> Dosya ve de\u011fi\u015fken isimlerinde tutarl\u0131l\u0131k kullan\u0131n.<\/li>\n<li><strong>Dizin Yap\u0131s\u0131:<\/strong> Mod\u00fclleri mant\u0131ksal olarak grupland\u0131ran bir dizin yap\u0131s\u0131 olu\u015fturun (\u00f6rn: <code>\/routes<\/code>, <code>\/middlewares<\/code>, <code>\/controllers<\/code>, <code>\/utils<\/code>).<\/li>\n<li><strong>K\u00fc\u00e7\u00fck Mod\u00fcller:<\/strong> M\u00fcmk\u00fcn oldu\u011funca k\u00fc\u00e7\u00fck ve odaklanm\u0131\u015f mod\u00fcller yaz\u0131n.<\/li>\n<\/ul>\n<h3>Hata Y\u00f6netimi, G\u00fcvenlik ve Performans \u0130pu\u00e7lar\u0131<\/h3>\n<p>Sa\u011flam bir HTTP uygulamas\u0131 sadece i\u015flevsel olmakla kalmaz, ayn\u0131 zamanda hatalar\u0131 d\u00fczg\u00fcn bir \u015fekilde y\u00f6netmeli, g\u00fcvenlik a\u00e7\u0131klar\u0131na kar\u015f\u0131 korunmal\u0131 ve iyi bir performans sunmal\u0131d\u0131r.<\/p>\n<h4>Sa\u011flam Hata Y\u00f6netimi Stratejileri<\/h4>\n<p>Node.js'te hatalar asenkron do\u011falar\u0131 nedeniyle bazen zorlay\u0131c\u0131 olabilir. Sunucu taraf\u0131nda olu\u015fabilecek hatalar\u0131 (\u00f6rn: dosya okuma hatas\u0131, veritaban\u0131 ba\u011flant\u0131 hatas\u0131) yakalamak ve istemciye uygun bir hata yan\u0131t\u0131 g\u00f6ndermek \u00f6nemlidir.<\/p>\n<ul>\n<li><strong><code>try-catch<\/code> Bloklar\u0131:<\/strong> Senkron kod bloklar\u0131ndaki hatalar\u0131 yakalamak i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li><strong>Promise <code>.catch()<\/code>:<\/strong> Promise tabanl\u0131 asenkron i\u015flemlerin hatalar\u0131n\u0131 y\u00f6netmek i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li><strong>Global Hata Yakalay\u0131c\u0131lar:<\/strong> Yakalanmayan hatalar i\u00e7in <code>process.on('uncaughtException')<\/code> ve <code>process.on('unhandledRejection')<\/code> gibi olay dinleyicileri kullan\u0131labilir. Bu, uygulaman\u0131n \u00e7\u00f6kmesini \u00f6nlemek ve temiz bir \u015fekilde kapanmas\u0131n\u0131 sa\u011flamak i\u00e7in \u00f6nemlidir.<\/li>\n<li><strong>\u00d6zel Hata Middleware'i:<\/strong> T\u00fcm hata durumlar\u0131n\u0131 merkezi bir noktada ele almak i\u00e7in \u00f6zel bir hata middleware'i olu\u015fturulabilir.<\/li>\n<\/ul>\n<h4>Temel G\u00fcvenlik \u00d6nlemleri<\/h4>\n<p>Kendi HTTP mod\u00fcl\u00fcn\u00fcz\u00fc geli\u015ftirirken temel g\u00fcvenlik ad\u0131mlar\u0131n\u0131 g\u00f6z ard\u0131 etmemelisiniz:<\/p>\n<ul>\n<li><strong>Giri\u015f Do\u011frulama (Input Validation):<\/strong> Kullan\u0131c\u0131dan gelen t\u00fcm giri\u015fleri her zaman do\u011frulay\u0131n ve sanitize edin.<\/li>\n<li><strong>HTTP Ba\u015fl\u0131klar\u0131:<\/strong> G\u00fcvenlik ile ilgili HTTP ba\u015fl\u0131klar\u0131n\u0131 (\u00f6rn: <code>X-Content-Type-Options<\/code>, <code>X-Frame-Options<\/code>, <code>Content-Security-Policy<\/code>) ayarlay\u0131n.<\/li>\n<li><strong>Hassas Veri Y\u00f6netimi:<\/strong> Parolalar gibi hassas verileri \u015fifreleyin ve g\u00fcvenli bir \u015fekilde saklay\u0131n.<\/li>\n<li><strong>Rate Limiting:<\/strong> DDoS sald\u0131r\u0131lar\u0131n\u0131 veya brute-force denemelerini \u00f6nlemek i\u00e7in istek h\u0131z s\u0131n\u0131rlamas\u0131 uygulay\u0131n.<\/li>\n<li><strong>G\u00fcvenlik A\u00e7\u0131klar\u0131:<\/strong> SQL Enjeksiyonu, XSS (Cross-Site Scripting), CSRF (Cross-Site Request Forgery) gibi yayg\u0131n g\u00fcvenlik a\u00e7\u0131klar\u0131na kar\u015f\u0131 \u00f6nlemler al\u0131n.<\/li>\n<\/ul>\n<h4>Performans \u0130yile\u015ftirmeleri ve \u00d6l\u00e7eklenebilirlik<\/h4>\n<p>Node.js, tek i\u015f par\u00e7ac\u0131kl\u0131 yap\u0131s\u0131 nedeniyle CPU yo\u011fun i\u015flemler i\u00e7in do\u011frudan uygun de\u011fildir. Ancak do\u011fru stratejilerle y\u00fcksek performansl\u0131 ve \u00f6l\u00e7eklenebilir uygulamalar geli\u015ftirebilirsiniz:<\/p>\n<ul>\n<li><strong>Asenkron \u0130\u015flemler:<\/strong> Blocking (engelleyici) operasyonlardan ka\u00e7\u0131n\u0131n. T\u00fcm I\/O (giri\u015f\/\u00e7\u0131k\u0131\u015f) i\u015flemlerini asenkron olarak yap\u0131n.<\/li>\n<li><strong>K\u00fcmeleme (Clustering):<\/strong> Node.js'in <code>cluster<\/code> mod\u00fcl\u00fcn\u00fc kullanarak birden fazla CPU \u00e7ekirde\u011fini kullanabilir ve uygulaman\u0131z\u0131n performans\u0131n\u0131 art\u0131rabilirsiniz.<\/li>\n<li><strong>Y\u00fck Dengeleme (Load Balancing):<\/strong> Birden fazla uygulama \u00f6rne\u011fini bir y\u00fck dengeleyici arkas\u0131na yerle\u015ftirerek gelen istekleri da\u011f\u0131t\u0131n.<\/li>\n<li><strong>\u00d6nbellekleme (Caching):<\/strong> S\u0131k eri\u015filen verileri \u00f6nbelle\u011fe alarak veritaban\u0131 veya di\u011fer kaynaklara yap\u0131lan gereksiz \u00e7a\u011fr\u0131lar\u0131 azalt\u0131n.<\/li>\n<li><strong>Statik Dosya Sunumu:<\/strong> Resimler, CSS, JavaScript gibi statik dosyalar\u0131 do\u011frudan Node.js sunucusu yerine Nginx gibi optimize edilmi\u015f bir web sunucusu \u00fczerinden sunun.<\/li>\n<\/ul>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu makalede, Node.js'in yerle\u015fik <code>http<\/code> mod\u00fcl\u00fcn\u00fc kullanarak nas\u0131l mod\u00fcler bir HTTP uygulamas\u0131 olu\u015fturulaca\u011f\u0131n\u0131 detayl\u0131 bir \u015fekilde inceledik. Temel sunucu kurulumundan, istek y\u00f6nlendirmeye, middleware kullan\u0131m\u0131na ve mod\u00fcler yap\u0131land\u0131rmaya kadar bir\u00e7ok konuyu ele ald\u0131k. Kendi HTTP mod\u00fcl\u00fcn\u00fcz\u00fc in\u015fa etmek, Node.js'in alt\u0131nda yatan mekanizmalar\u0131 daha iyi anlaman\u0131z\u0131 sa\u011flar ve size framework'lerin sundu\u011fu kolayl\u0131klar\u0131n \u00f6tesinde daha fazla kontrol ve esneklik sunar. Bu yakla\u015f\u0131m, performans kritik uygulamalar veya \u00f6\u011frenme ama\u00e7l\u0131 projeler i\u00e7in paha bi\u00e7ilmez bir deneyim sa\u011flar. Temel bilgileri ve en iyi uygulamalar\u0131 takip ederek, sa\u011flam, g\u00fcvenli ve \u00f6l\u00e7eklenebilir Node.js HTTP uygulamalar\u0131 geli\u015ftirebilirsiniz.<\/p>\n<h3>SSS (S\u0131k Sorulan Sorular)<\/h3>\n<h4>Neden Express.js yerine kendi HTTP mod\u00fcl\u00fcm\u00fcz\u00fc yazmal\u0131y\u0131z?<\/h4>\n<p>Kendi HTTP mod\u00fcl\u00fcn\u00fcz\u00fc yazmak, Node.js'in temel HTTP mekanizmalar\u0131n\u0131 derinlemesine anlaman\u0131z\u0131 sa\u011flar. Bu, framework'lerin nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 kavraman\u0131za yard\u0131mc\u0131 olur ve \u00f6zel ihtiya\u00e7lar\u0131n\u0131za g\u00f6re daha hafif, optimize edilmi\u015f \u00e7\u00f6z\u00fcmler geli\u015ftirmenize olanak tan\u0131r. Ayr\u0131ca, framework ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n\u0131 azalt\u0131r ve daha fazla kontrol sa\u011flar.<\/p>\n<h4>Bu yakla\u015f\u0131m\u0131n dezavantajlar\u0131 nelerdir?<\/h4>\n<p>En b\u00fcy\u00fck dezavantaj\u0131, Express.js gibi olgun framework'lerin sundu\u011fu bir\u00e7ok haz\u0131r \u00f6zelli\u011fi (\u00f6rne\u011fin, geli\u015fmi\u015f y\u00f6nlendirme,<\/p>\n","protected":false},"excerpt":{"rendered":"Node.js, asenkron ve olay tabanl\u0131 mimarisi sayesinde sunucu taraf\u0131 uygulamalar geli\u015ftirmek i\u00e7in pop\u00fcler bir platform haline gelmi\u015ftir. Genellikle Expre&#8230;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[136],"tags":[],"class_list":{"0":"post-37138","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-node-js","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Node.js HTTP Sunucusu ile Kendi Mod\u00fcler HTTP Uygulaman\u0131z\u0131 Geli\u015ftirme Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/node-js-http-sunucusu-ile-kendi-moduler-http-uygulamanizi-gelistirme-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Node.js HTTP Sunucusu ile Kendi Mod\u00fcler HTTP Uygulaman\u0131z\u0131 Geli\u015ftirme Rehberi\" \/>\n<meta property=\"og:description\" content=\"Node.js, asenkron ve olay tabanl\u0131 mimarisi sayesinde sunucu taraf\u0131 uygulamalar geli\u015ftirmek i\u00e7in pop\u00fcler bir platform haline gelmi\u015ftir. Genellikle Expre...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/node-js-http-sunucusu-ile-kendi-moduler-http-uygulamanizi-gelistirme-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-27T20:30:46+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-http-sunucusu-ile-kendi-moduler-http-uygulamanizi-gelistirme-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-http-sunucusu-ile-kendi-moduler-http-uygulamanizi-gelistirme-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Node.js HTTP Sunucusu ile Kendi Mod\u00fcler HTTP Uygulaman\u0131z\u0131 Geli\u015ftirme Rehberi\",\"datePublished\":\"2025-12-27T20:30:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-http-sunucusu-ile-kendi-moduler-http-uygulamanizi-gelistirme-rehberi\/\"},\"wordCount\":2225,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Node.js\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/node-js-http-sunucusu-ile-kendi-moduler-http-uygulamanizi-gelistirme-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-http-sunucusu-ile-kendi-moduler-http-uygulamanizi-gelistirme-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/node-js-http-sunucusu-ile-kendi-moduler-http-uygulamanizi-gelistirme-rehberi\/\",\"name\":\"Node.js HTTP Sunucusu ile Kendi Mod\u00fcler HTTP Uygulaman\u0131z\u0131 Geli\u015ftirme Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-27T20:30:46+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-http-sunucusu-ile-kendi-moduler-http-uygulamanizi-gelistirme-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/node-js-http-sunucusu-ile-kendi-moduler-http-uygulamanizi-gelistirme-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-http-sunucusu-ile-kendi-moduler-http-uygulamanizi-gelistirme-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Node.js HTTP Sunucusu ile Kendi Mod\u00fcler HTTP Uygulaman\u0131z\u0131 Geli\u015ftirme Rehberi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Node.js HTTP Sunucusu ile Kendi Mod\u00fcler HTTP Uygulaman\u0131z\u0131 Geli\u015ftirme Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/node-js-http-sunucusu-ile-kendi-moduler-http-uygulamanizi-gelistirme-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Node.js HTTP Sunucusu ile Kendi Mod\u00fcler HTTP Uygulaman\u0131z\u0131 Geli\u015ftirme Rehberi","og_description":"Node.js, asenkron ve olay tabanl\u0131 mimarisi sayesinde sunucu taraf\u0131 uygulamalar geli\u015ftirmek i\u00e7in pop\u00fcler bir platform haline gelmi\u015ftir. Genellikle Expre...","og_url":"https:\/\/fatihsoysal.com\/blog\/node-js-http-sunucusu-ile-kendi-moduler-http-uygulamanizi-gelistirme-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-27T20:30:46+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"15 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/node-js-http-sunucusu-ile-kendi-moduler-http-uygulamanizi-gelistirme-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/node-js-http-sunucusu-ile-kendi-moduler-http-uygulamanizi-gelistirme-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Node.js HTTP Sunucusu ile Kendi Mod\u00fcler HTTP Uygulaman\u0131z\u0131 Geli\u015ftirme Rehberi","datePublished":"2025-12-27T20:30:46+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/node-js-http-sunucusu-ile-kendi-moduler-http-uygulamanizi-gelistirme-rehberi\/"},"wordCount":2225,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Node.js"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/node-js-http-sunucusu-ile-kendi-moduler-http-uygulamanizi-gelistirme-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/node-js-http-sunucusu-ile-kendi-moduler-http-uygulamanizi-gelistirme-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/node-js-http-sunucusu-ile-kendi-moduler-http-uygulamanizi-gelistirme-rehberi\/","name":"Node.js HTTP Sunucusu ile Kendi Mod\u00fcler HTTP Uygulaman\u0131z\u0131 Geli\u015ftirme Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-27T20:30:46+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/node-js-http-sunucusu-ile-kendi-moduler-http-uygulamanizi-gelistirme-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/node-js-http-sunucusu-ile-kendi-moduler-http-uygulamanizi-gelistirme-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/node-js-http-sunucusu-ile-kendi-moduler-http-uygulamanizi-gelistirme-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Node.js HTTP Sunucusu ile Kendi Mod\u00fcler HTTP Uygulaman\u0131z\u0131 Geli\u015ftirme Rehberi"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37138","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=37138"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37138\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=37138"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=37138"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=37138"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}