{"id":39400,"date":"2026-02-20T16:40:51","date_gmt":"2026-02-20T13:40:51","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=39400"},"modified":"2026-02-20T16:40:51","modified_gmt":"2026-02-20T13:40:51","slug":"expresste-req-nesnesi-nasil-kullanilir-kapsamli-bir-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/expresste-req-nesnesi-nasil-kullanilir-kapsamli-bir-rehber\/","title":{"rendered":"Express&#8217;te req Nesnesi Nas\u0131l Kullan\u0131l\u0131r? Kapsaml\u0131 Bir Rehber"},"content":{"rendered":"<p><body><\/p>\n<h2>Express&#8217;te req Nesnesi Nas\u0131l Kullan\u0131l\u0131r? Kapsaml\u0131 Bir Rehber<\/h2>\n<h3>Giri\u015f: req Nesnesine Genel Bak\u0131\u015f<\/h3>\n<p>Express.js, Node.js i\u00e7in minimalist ve esnek bir web uygulama \u00e7er\u00e7evesidir. Express ile bir web uygulamas\u0131 veya API geli\u015ftirirken, gelen HTTP isteklerini i\u015flemek i\u00e7in <code>req<\/code> (request) nesnesi merkezi bir rol oynar. Her bir HTTP iste\u011fi, Express taraf\u0131ndan otomatik olarak bir <code>req<\/code> nesnesine d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr ve bu nesne, ilgili rota i\u015fleyici (route handler) veya ortakatman (middleware) fonksiyonlar\u0131na arg\u00fcman olarak ge\u00e7irilir.<\/p>\n<p><code>req<\/code> nesnesi, istemciden gelen istek hakk\u0131nda her t\u00fcrl\u00fc bilgiyi bar\u0131nd\u0131ran bir JavaScript objesidir. Bu bilgiler aras\u0131nda istek parametreleri, sorgu dizisi (query string) verileri, istek g\u00f6vdesi (request body), HTTP ba\u015fl\u0131klar\u0131, istemci IP adresi ve daha fazlas\u0131 bulunur. Bir geli\u015ftirici olarak, <code>req<\/code> nesnesini kullanarak gelen iste\u011fi analiz edebilir, kullan\u0131c\u0131 giri\u015fini i\u015fleyebilir, g\u00fcvenlik kontrolleri yapabilir ve uygulaman\u0131z\u0131n mant\u0131\u011f\u0131n\u0131 bu bilgilere g\u00f6re \u015fekillendirebilirsiniz.<\/p>\n<p>Bu makalede, <code>req<\/code> nesnesinin \u00e7e\u015fitli \u00f6zelliklerini ve metotlar\u0131n\u0131 detayl\u0131 bir \u015fekilde inceleyece\u011fiz. Her bir \u00f6zelli\u011fin ne anlama geldi\u011fini, nas\u0131l kullan\u0131ld\u0131\u011f\u0131n\u0131 ve ger\u00e7ek d\u00fcnya senaryolar\u0131nda nas\u0131l faydal\u0131 olabilece\u011fini \u00f6rneklerle a\u00e7\u0131klayaca\u011f\u0131z. Ayr\u0131ca, <code>req<\/code> nesnesini g\u00fcvenli ve etkin bir \u015fekilde kullanmak i\u00e7in en iyi uygulamalara ve s\u0131k\u00e7a yap\u0131lan hatalara da de\u011finece\u011fiz. Express uygulamalar\u0131n\u0131zda <code>req<\/code> nesnesinin g\u00fcc\u00fcnden tam olarak yararlanmak i\u00e7in bu kapsaml\u0131 rehber size yol g\u00f6sterecektir.<\/p>\n<h3>req Nesnesinin Temel \u00d6zellikleri<\/h3>\n<p><code>req<\/code> nesnesi, gelen HTTP iste\u011fine dair bir\u00e7ok temel bilgiyi bar\u0131nd\u0131ran zengin bir yap\u0131ya sahiptir. Bu b\u00f6l\u00fcmde, en s\u0131k kullan\u0131lan ve kritik \u00f6zelliklerini detayl\u0131ca inceleyece\u011fiz.<\/p>\n<h4>req.params: URL Parametreleri<\/h4>\n<p><code>req.params<\/code> nesnesi, URL&#8217;deki dinamik segmentleri yakalamak i\u00e7in kullan\u0131l\u0131r. \u00d6zellikle RESTful API&#8217;lerde belirli bir kayna\u011f\u0131n kimli\u011fini belirtmek i\u00e7in \u00e7ok yayg\u0131n olarak kullan\u0131l\u0131r. \u00d6rne\u011fin, <code>\/users\/:id<\/code> gibi bir rotada <code>:id<\/code>, dinamik bir parametredir.<\/p>\n<pre><code class=\"language-javascript\">app.get('\/users\/:userId\/posts\/:postId', (req, res) => {\n  const userId = req.params.userId; \/\/ \u00d6rne\u011fin: '123'\n  const postId = req.params.postId; \/\/ \u00d6rne\u011fin: '456'\n  res.send(<code>Kullan\u0131c\u0131 ID: ${userId}, G\u00f6nderi ID: ${postId}<\/code>);\n});<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, <code>\/users\/123\/posts\/456<\/code> adresine yap\u0131lan bir istekte <code>req.params<\/code> objesi <code>{ userId: '123', postId: '456' }<\/code> \u015feklinde olacakt\u0131r. Bu parametreler genellikle string format\u0131nda gelir ve say\u0131sal de\u011ferler i\u00e7in d\u00f6n\u00fc\u015ft\u00fcrme yap\u0131lmas\u0131 gerekebilir (\u00f6rn. <code>parseInt(userId)<\/code>).<\/p>\n<h4>req.query: Sorgu Dizisi Parametreleri<\/h4>\n<p><code>req.query<\/code> nesnesi, URL&#8217;nin sorgu dizisinde (query string) yer alan parametreleri i\u00e7erir. Bu parametreler, genellikle filtreleme, s\u0131ralama, sayfalama gibi iste\u011fe ba\u011fl\u0131 verileri iletmek i\u00e7in kullan\u0131l\u0131r. Sorgu dizisi, URL&#8217;de <code>?<\/code> i\u015faretinden sonra ba\u015flar ve parametreler <code>anahtar=de\u011fer<\/code> \u00e7iftleri \u015feklinde, <code>&<\/code> ile ayr\u0131larak belirtilir.<\/p>\n<pre><code class=\"language-javascript\">app.get('\/products', (req, res) => {\n  const category = req.query.category; \/\/ \u00d6rne\u011fin: 'elektronik'\n  const sortBy = req.query.sortBy;     \/\/ \u00d6rne\u011fin: 'price'\n  const limit = req.query.limit;       \/\/ \u00d6rne\u011fin: '10'\n\n  if (category) {\n    res.send(<code>Kategoriye g\u00f6re \u00fcr\u00fcnler: ${category}. S\u0131ralama: ${sortBy || 'yok'}. Limit: ${limit || 't\u00fcm'}<\/code>);\n  } else {\n    res.send('T\u00fcm \u00fcr\u00fcnler listeleniyor.');\n  }\n});<\/code><\/pre>\n<p><code>\/products?category=elektronik&sortBy=price&limit=10<\/code> adresine yap\u0131lan bir istekte <code>req.query<\/code> objesi <code>{ category: 'elektronik', sortBy: 'price', limit: '10' }<\/code> \u015feklinde olacakt\u0131r. <code>req.query<\/code> i\u00e7indeki t\u00fcm de\u011ferler de string olarak gelir.<\/p>\n<h4>req.body: \u0130stek G\u00f6vdesi Verileri<\/h4>\n<p><code>req.body<\/code> nesnesi, <code>POST<\/code>, <code>PUT<\/code> veya <code>PATCH<\/code> gibi isteklerde istemciden g\u00f6nderilen verileri i\u00e7erir. Bu veriler genellikle HTML formlar\u0131ndan (URL kodlu veya \u00e7ok par\u00e7al\u0131 form verisi) veya JSON\/XML format\u0131nda API isteklerinden gelir. <code>req.body<\/code>&#8216;ye eri\u015febilmek i\u00e7in Express uygulaman\u0131zda uygun bir body parser ortakatman\u0131n\u0131n (middleware) yap\u0131land\u0131r\u0131lm\u0131\u015f olmas\u0131 gerekir. Express&#8217;in 4.16.0 s\u00fcr\u00fcm\u00fcnden itibaren <code>express.json()<\/code> ve <code>express.urlencoded()<\/code> yerle\u015fik olarak gelmektedir.<\/p>\n<pre><code class=\"language-javascript\">\/\/ app.js dosyas\u0131n\u0131n ba\u015f\u0131nda\nconst express = require('express');\nconst app = express();\n\n\/\/ JSON istek g\u00f6vdelerini ayr\u0131\u015ft\u0131rmak i\u00e7in\napp.use(express.json());\n\/\/ URL-encoded istek g\u00f6vdelerini ayr\u0131\u015ft\u0131rmak i\u00e7in\napp.use(express.urlencoded({ extended: true }));\n\napp.post('\/register', (req, res) => {\n  const { username, email, password } = req.body;\n  if (username && email && password) {\n    res.status(201).send(<code>Kullan\u0131c\u0131 kaydedildi: ${username}, ${email}<\/code>);\n  } else {\n    res.status(400).send('Eksik bilgi.');\n  }\n});<\/code><\/pre>\n<p>Bir JSON iste\u011fi (Content-Type: application\/json) <code>{ \"username\": \"ali\", \"email\": \"ali@example.com\", \"password\": \"123\" }<\/code> g\u00f6nderildi\u011finde, <code>req.body<\/code> bu objeyi i\u00e7erecektir.<\/p>\n<h4>req.headers: \u0130stek Ba\u015fl\u0131klar\u0131<\/h4>\n<p><code>req.headers<\/code> nesnesi, istemci taraf\u0131ndan g\u00f6nderilen t\u00fcm HTTP ba\u015fl\u0131klar\u0131n\u0131 i\u00e7erir. Bu ba\u015fl\u0131klar, iste\u011fin i\u00e7eri\u011fi, istemci bilgileri, kimlik do\u011frulama belirte\u00e7leri (token) ve \u00f6nbellekleme talimatlar\u0131 gibi \u00e7e\u015fitli meta verileri ta\u015f\u0131r. Ba\u015fl\u0131k anahtarlar\u0131 genellikle k\u00fc\u00e7\u00fck harfe d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr.<\/p>\n<pre><code class=\"language-javascript\">app.get('\/info', (req, res) => {\n  const userAgent = req.headers['user-agent'];\n  const contentType = req.headers['content-type'];\n  const authorization = req.headers['authorization'];\n\n  res.send(<code>User-Agent: ${userAgent}\\nContent-Type: ${contentType || 'Yok'}\\nAuthorization: ${authorization || 'Yok'}<\/code>);\n});<\/code><\/pre>\n<p><code>User-Agent<\/code> ba\u015fl\u0131\u011f\u0131, iste\u011fi yapan istemcinin (taray\u0131c\u0131, mobil uygulama vb.) t\u00fcr\u00fcn\u00fc ve s\u00fcr\u00fcm\u00fcn\u00fc belirtir. <code>Authorization<\/code> ba\u015fl\u0131\u011f\u0131 ise genellikle JWT (JSON Web Token) gibi kimlik do\u011frulama belirte\u00e7lerini ta\u015f\u0131r.<\/p>\n<h4>req.method: \u0130stek Metodu<\/h4>\n<p><code>req.method<\/code> \u00f6zelli\u011fi, gelen HTTP iste\u011finin metodunu (fiilini) bir string olarak d\u00f6nd\u00fcr\u00fcr. \u00d6rne\u011fin, <code>GET<\/code>, <code>POST<\/code>, <code>PUT<\/code>, <code>DELETE<\/code> gibi. Bu \u00f6zellik, rotalar\u0131 daha genel hale getirmek veya belirli bir iste\u011fe \u00f6zel mant\u0131k uygulamak i\u00e7in kullan\u0131labilir.<\/p>\n<pre><code class=\"language-javascript\">app.all('\/data', (req, res) => { \/\/ 'app.all' t\u00fcm HTTP metotlar\u0131n\u0131 yakalar\n  res.send(<code>Bu istek bir ${req.method} iste\u011fidir.<\/code>);\n});<\/code><\/pre>\n<h4>req.url \/ req.originalUrl: \u0130stek URL&#8217;si<\/h4>\n<p>*   <code>req.url<\/code>: Gelen iste\u011fin URL yolunu d\u00f6nd\u00fcr\u00fcr. Bu yol, temel URL&#8217;den sonraki k\u0131sm\u0131 ve sorgu dizisini i\u00e7erir, ancak ana bilgisayar ad\u0131n\u0131 (hostname) ve protokol\u00fc i\u00e7ermez. Express&#8217;in y\u00f6nlendirme mekanizmas\u0131 taraf\u0131ndan i\u015flendikten sonra de\u011fi\u015febilir.<br \/>\n*   <code>req.originalUrl<\/code>: <code>req.url<\/code>&#8216;dan farkl\u0131 olarak, gelen iste\u011fin orijinal URL yolunu d\u00f6nd\u00fcr\u00fcr. Bu, y\u00f6nlendirme veya ara yaz\u0131l\u0131mlar taraf\u0131ndan yap\u0131lan de\u011fi\u015fikliklerden etkilenmez. Genellikle, iste\u011fin ilk geldi\u011fi haliyle URL&#8217;yi g\u00f6rmek istendi\u011finde kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-javascript\">app.get('\/admin\/*', (req, res, next) => {\n  console.log('Original URL:', req.originalUrl); \/\/ \u00d6rn: \/admin\/users?page=1\n  console.log('URL:', req.url);                 \/\/ \u00d6rn: \/users?page=1 (e\u011fer bir router kullan\u0131l\u0131yorsa de\u011fi\u015febilir)\n  next();\n});\n\napp.get('\/admin\/users', (req, res) => {\n  res.send(<code>Admin kullan\u0131c\u0131lar\u0131 sayfas\u0131. Orijinal URL: ${req.originalUrl}<\/code>);\n});<\/code><\/pre>\n<h4>req.path: \u0130stek Yolu<\/h4>\n<p><code>req.path<\/code> \u00f6zelli\u011fi, istek URL&#8217;sinin yol k\u0131sm\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr. Sorgu dizisi veya karma (hash) k\u0131sm\u0131 i\u00e7ermez. Sadece yolu g\u00f6sterir.<\/p>\n<pre><code class=\"language-javascript\">app.get('\/items\/search?q=kitap', (req, res) => {\n  res.send(<code>\u0130stek yolu: ${req.path}<\/code>); \/\/ \u00c7\u0131kt\u0131: \/items\/search\n});<\/code><\/pre>\n<h4>req.protocol: \u0130stek Protokol\u00fc<\/h4>\n<p><code>req.protocol<\/code> \u00f6zelli\u011fi, iste\u011fin yap\u0131ld\u0131\u011f\u0131 protokol\u00fc (\u00f6rn. <code>http<\/code> veya <code>https<\/code>) bir string olarak d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-javascript\">app.get('\/', (req, res) => {\n  res.send(<code>Bu ba\u011flant\u0131 ${req.protocol} \u00fczerinden yap\u0131ld\u0131.<\/code>);\n});<\/code><\/pre>\n<h4>req.hostname \/ req.ip: Ana Bilgisayar Ad\u0131 ve IP Adresi<\/h4>\n<p>*   <code>req.hostname<\/code>: \u0130ste\u011fin yap\u0131ld\u0131\u011f\u0131 ana bilgisayar ad\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr. \u00d6rne\u011fin, <code>example.com<\/code>.<br \/>\n*   <code>req.ip<\/code>: \u0130stemcinin IP adresini d\u00f6nd\u00fcr\u00fcr. Bir proxy arkas\u0131ndan gelen isteklerde, proxy&#8217;nin IP&#8217;si yerine ger\u00e7ek istemci IP&#8217;sini almak i\u00e7in <code>app.set('trust proxy', true)<\/code> ayar\u0131n\u0131 yapmak gerekebilir.<\/p>\n<pre><code class=\"language-javascript\">app.get('\/whoami', (req, res) => {\n  res.send(<code>Ana bilgisayar: ${req.hostname}, IP adresiniz: ${req.ip}<\/code>);\n});<\/code><\/pre>\n<h4>req.secure: G\u00fcvenli Ba\u011flant\u0131 Kontrol\u00fc<\/h4>\n<p><code>req.secure<\/code> \u00f6zelli\u011fi, iste\u011fin bir SSL\/TLS g\u00fcvenli ba\u011flant\u0131s\u0131 (HTTPS) \u00fczerinden mi yap\u0131ld\u0131\u011f\u0131n\u0131 belirten bir boolean de\u011feridir. <code>true<\/code> ise HTTPS, <code>false<\/code> ise HTTP&#8217;dir. Proxy arkas\u0131ndan gelen isteklerde do\u011fru sonu\u00e7 almak i\u00e7in <code>app.set('trust proxy', true)<\/code> ayar\u0131 \u00f6nemlidir.<\/p>\n<pre><code class=\"language-javascript\">app.get('\/secure-check', (req, res) => {\n  if (req.secure) {\n    res.send('Bu istek g\u00fcvenli (HTTPS) bir ba\u011flant\u0131 \u00fczerinden yap\u0131ld\u0131.');\n  } else {\n    res.send('Bu istek g\u00fcvenli de\u011fil (HTTP).');\n  }\n});<\/code><\/pre>\n<h4>req.fresh \/ req.stale: \u00d6nbellek Durumu<\/h4>\n<p>Bu \u00f6zellikler, istemcinin \u00f6nbelle\u011fi ile sunucudaki kaynak aras\u0131nda bir kar\u015f\u0131la\u015ft\u0131rma yaparak \u00f6nbellek durumunu kontrol eder. <code>If-None-Match<\/code> ve <code>If-Modified-Since<\/code> gibi HTTP ba\u015fl\u0131klar\u0131na dayan\u0131r.<\/p>\n<p>*   <code>req.fresh<\/code>: \u0130stemcinin \u00f6nbelle\u011fe ald\u0131\u011f\u0131 yan\u0131t\u0131n hala g\u00fcncel (fresh) olup olmad\u0131\u011f\u0131n\u0131 belirten boolean de\u011feridir. <code>true<\/code> ise g\u00fcnceldir ve 304 Not Modified yan\u0131t\u0131 g\u00f6nderilebilir.<br \/>\n*   <code>req.stale<\/code>: \u0130stemcinin \u00f6nbelle\u011fe ald\u0131\u011f\u0131 yan\u0131t\u0131n art\u0131k g\u00fcncel olmad\u0131\u011f\u0131n\u0131 (stale) belirten boolean de\u011feridir. <code>true<\/code> ise sunucunun yeni bir yan\u0131t g\u00f6ndermesi gerekir.<\/p>\n<pre><code class=\"language-javascript\">app.get('\/data-cache', (req, res) => {\n  \/\/ \u00d6rnek bir ETag veya Last-Modified ba\u015fl\u0131\u011f\u0131 ayarlay\u0131n\n  res.set('ETag', 'some-unique-hash');\n  \/\/ res.set('Last-Modified', new Date().toUTCString());\n\n  if (req.fresh) {\n    res.status(304).send(); \/\/ Veri g\u00fcncel, yeni i\u00e7erik g\u00f6nderme\n  } else {\n    res.status(200).send('Yeni veri g\u00f6nderiliyor.'); \/\/ Veri g\u00fcncel de\u011fil, yeni i\u00e7erik g\u00f6nder\n  }\n});<\/code><\/pre>\n<h4>req.subdomains: Alt Alan Adlar\u0131<\/h4>\n<p><code>req.subdomains<\/code> \u00f6zelli\u011fi, iste\u011fin yap\u0131ld\u0131\u011f\u0131 ana bilgisayar ad\u0131n\u0131n alt alan adlar\u0131n\u0131 (subdomain) bir dizi olarak d\u00f6nd\u00fcr\u00fcr. \u00d6rne\u011fin, <code>app.example.com<\/code> i\u00e7in <code>['app']<\/code> d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-javascript\">\/\/ app.set('subdomain offset', 2); \/\/ Varsay\u0131lan 2'dir, ihtiyaca g\u00f6re ayarlanabilir\napp.get('\/', (req, res) => {\n  res.send(<code>Alt alan adlar\u0131: ${req.subdomains.join(', ') || 'Yok'}<\/code>);\n});<\/code><\/pre>\n<p><code>blog.users.example.com<\/code> adresine yap\u0131lan bir istekte <code>req.subdomains<\/code> de\u011feri <code>['blog', 'users']<\/code> olacakt\u0131r (e\u011fer <code>subdomain offset<\/code> ayar\u0131 varsay\u0131lan olarak b\u0131rak\u0131l\u0131rsa).<\/p>\n<h3>req Nesnesinin Metotlar\u0131<\/h3>\n<p><code>req<\/code> nesnesi, sadece \u00f6zellikler de\u011fil, ayn\u0131 zamanda gelen iste\u011fi daha dinamik bir \u015fekilde sorgulamak i\u00e7in kullan\u0131labilecek bir dizi metoda da sahiptir.<\/p>\n<h4>req.accepts(): Kabul Edilen \u0130\u00e7erik T\u00fcrleri<\/h4>\n<p><code>req.accepts()<\/code> metodu, istemcinin <code>Accept<\/code> HTTP ba\u015fl\u0131\u011f\u0131na g\u00f6re belirli i\u00e7erik t\u00fcrlerinden hangilerini kabul etti\u011fini kontrol eder. Bu, sunucunun istemciye en uygun yan\u0131t format\u0131n\u0131 (\u00f6rn. JSON, HTML, XML) g\u00f6ndermesine olanak tan\u0131r. Bir veya daha fazla MIME t\u00fcr\u00fc, dosya uzant\u0131s\u0131 veya bir dizi olarak arg\u00fcman al\u0131r.<\/p>\n<pre><code class=\"language-javascript\">app.get('\/content', (req, res) => {\n  if (req.accepts('html')) {\n    res.send('');\n  } else if (req.accepts('json')) {\n    res.json({ message: 'Merhaba JSON!' });\n  } else {\n    res.status(406).send('Kabul edilebilir bir i\u00e7erik t\u00fcr\u00fc bulunamad\u0131.');\n  }\n});<\/code><\/pre>\n<p><code>req.accepts(['json', 'html'])<\/code> \u015feklinde bir dizi de verebilirsiniz. Metot, kabul edilen ilk t\u00fcr\u00fc d\u00f6nd\u00fcr\u00fcr veya hi\u00e7birini kabul etmiyorsa <code>false<\/code> d\u00f6nd\u00fcr\u00fcr.<\/p>\n<h4>req.acceptsCharsets(): Kabul Edilen Karakter K\u00fcmeleri<\/h4>\n<p><code>req.acceptsCharsets()<\/code> metodu, istemcinin <code>Accept-Charset<\/code> ba\u015fl\u0131\u011f\u0131na g\u00f6re hangi karakter k\u00fcmelerini (\u00f6rn. <code>utf-8<\/code>, <code>iso-8859-1<\/code>) kabul etti\u011fini kontrol eder.<\/p>\n<pre><code class=\"language-javascript\">app.get('\/charset', (req, res) => {\n  if (req.acceptsCharsets('utf-8')) {\n    res.set('Content-Type', 'text\/plain; charset=utf-8');\n    res.send('UTF-8 karakter k\u00fcmesi kabul edildi.');\n  } else {\n    res.status(406).send('UTF-8 kabul edilmiyor.');\n  }\n});<\/code><\/pre>\n<h4>req.acceptsEncodings(): Kabul Edilen Kodlamalar<\/h4>\n<p><code>req.acceptsEncodings()<\/code> metodu, istemcinin <code>Accept-Encoding<\/code> ba\u015fl\u0131\u011f\u0131na g\u00f6re hangi kodlamalar\u0131 (\u00f6rn. <code>gzip<\/code>, <code>deflate<\/code>, <code>br<\/code>) kabul etti\u011fini kontrol eder. Bu, yan\u0131t\u0131n s\u0131k\u0131\u015ft\u0131r\u0131l\u0131p s\u0131k\u0131\u015ft\u0131r\u0131lmayaca\u011f\u0131n\u0131 belirlemek i\u00e7in kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-javascript\">app.get('\/compressed', (req, res) => {\n  if (req.acceptsEncodings('gzip')) {\n    res.set('Content-Encoding', 'gzip');\n    \/\/ Ger\u00e7ekte burada yan\u0131t\u0131 gzip ile s\u0131k\u0131\u015ft\u0131rmal\u0131s\u0131n\u0131z\n    res.send('Gzip kodlamas\u0131 kabul edildi.');\n  } else {\n    res.send('S\u0131k\u0131\u015ft\u0131r\u0131lmam\u0131\u015f yan\u0131t.');\n  }\n});<\/code><\/pre>\n<h4>req.acceptsLanguages(): Kabul Edilen Diller<\/h4>\n<p><code>req.acceptsLanguages()<\/code> metodu, istemcinin <code>Accept-Language<\/code> ba\u015fl\u0131\u011f\u0131na g\u00f6re hangi dilleri (\u00f6rn. <code>tr<\/code>, <code>en-US<\/code>) kabul etti\u011fini kontrol eder. \u00c7ok dilli uygulamalarda kullan\u0131c\u0131n\u0131n tercih etti\u011fi dili belirlemek i\u00e7in \u00e7ok kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-javascript\">app.get('\/hello', (req, res) => {\n  if (req.acceptsLanguages('tr')) {\n    res.send('Merhaba d\u00fcnya!');\n  } else if (req.acceptsLanguages('en')) {\n    res.send('Hello world!');\n  } else {\n    res.send('Welcome!');\n  }\n});<\/code><\/pre>\n<h4>req.get(): \u0130stek Ba\u015fl\u0131\u011f\u0131 Alma<\/h4>\n<p><code>req.get()<\/code> metodu, belirli bir HTTP ba\u015fl\u0131\u011f\u0131n\u0131n de\u011ferini k\u00fc\u00e7\u00fck\/b\u00fcy\u00fck harf duyarl\u0131l\u0131\u011f\u0131 olmadan almak i\u00e7in kullan\u0131l\u0131r. <code>req.headers['header-name']<\/code> ile ayn\u0131 i\u015flevi g\u00f6r\u00fcr ancak daha esnektir.<\/p>\n<pre><code class=\"language-javascript\">app.get('\/header-check', (req, res) => {\n  const host = req.get('Host');\n  const referer = req.get('Referer'); \/\/ Yanl\u0131\u015f yaz\u0131m bile olsa d\u00fczeltir\n  res.send(<code>Host: ${host}, Referer: ${referer || 'Yok'}<\/code>);\n});<\/code><\/pre>\n<h4>req.is(): \u0130stek \u0130\u00e7erik T\u00fcr\u00fc Kontrol\u00fc<\/h4>\n<p><code>req.is()<\/code> metodu, gelen iste\u011fin <code>Content-Type<\/code> ba\u015fl\u0131\u011f\u0131n\u0131n belirli bir MIME t\u00fcr\u00fcyle e\u015fle\u015fip e\u015fle\u015fmedi\u011fini kontrol eder. \u00d6zellikle <code>POST<\/code> veya <code>PUT<\/code> isteklerinde g\u00f6nderilen veri t\u00fcr\u00fcn\u00fc do\u011frulamak i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-javascript\">app.post('\/upload', (req, res) => {\n  if (req.is('json')) {\n    res.send('JSON format\u0131nda veri al\u0131nd\u0131.');\n  } else if (req.is('multipart\/form-data')) {\n    res.send('Form verisi (multipart) al\u0131nd\u0131.');\n  } else {\n    res.status(415).send('Desteklenmeyen i\u00e7erik t\u00fcr\u00fc.');\n  }\n});<\/code><\/pre>\n<h3>req Nesnesi ile Geli\u015fmi\u015f Kullan\u0131m Senaryolar\u0131<\/h3>\n<p><code>req<\/code> nesnesinin temel \u00f6zellikleri ve metotlar\u0131, Express uygulamalar\u0131n\u0131n bel kemi\u011fini olu\u015fturur. Ancak bu nesne, daha karma\u015f\u0131k ve g\u00fc\u00e7l\u00fc senaryolar i\u00e7in de geni\u015fletilebilir ve kullan\u0131labilir.<\/p>\n<h4>Kullan\u0131c\u0131 Kimlik Do\u011frulamas\u0131 ve Yetkilendirme<\/h4>\n<p>Kimlik do\u011frulama (authentication) ve yetkilendirme (authorization) genellikle ortakatmanlar (middleware) arac\u0131l\u0131\u011f\u0131yla yap\u0131l\u0131r. Ba\u015far\u0131l\u0131 bir kimlik do\u011frulamas\u0131n\u0131n ard\u0131ndan, kullan\u0131c\u0131ya ait bilgiler genellikle <code>req<\/code> nesnesine eklenerek sonraki rota i\u015fleyicileri veya di\u011fer ortakatmanlar taraf\u0131ndan kolayca eri\u015filebilir hale getirilir.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Kimlik do\u011frulama ortakatman\u0131 (middleware)\nfunction authenticateUser(req, res, next) {\n  const token = req.headers['authorization'];\n  if (!token) {\n    return res.status(401).send('Kimlik do\u011frulama belirteci eksik.');\n  }\n  \/\/ Token'\u0131 do\u011frula ve kullan\u0131c\u0131 bilgilerini al\n  try {\n    const user = verifyToken(token.split(' ')[1]); \/\/ Bearer token'\u0131 ayr\u0131\u015ft\u0131rma\n    req.user = user; \/\/ Kullan\u0131c\u0131 bilgilerini req nesnesine ekle\n    next();\n  } catch (error) {\n    res.status(403).send('Ge\u00e7ersiz kimlik do\u011frulama belirteci.');\n  }\n}\n\n\/\/ Rota i\u015fleyici\napp.get('\/profile', authenticateUser, (req, res) => {\n  \/\/ req.user art\u0131k kimli\u011fi do\u011frulanm\u0131\u015f kullan\u0131c\u0131 bilgilerini i\u00e7eriyor\n  res.send(<code>Merhaba, ${req.user.username}! Profil bilgileriniz.<\/code>);\n});<\/code><\/pre>\n<p>Bu sayede, <code>req.user<\/code> \u00f6zelli\u011fi uygulaman\u0131n herhangi bir yerinde oturum a\u00e7m\u0131\u015f kullan\u0131c\u0131ya eri\u015fim sa\u011flar.<\/p>\n<h4>Middleware Kullan\u0131m\u0131 ve req Nesnesini Geni\u015fletme<\/h4>\n<p>Express&#8217;in ortakatman yap\u0131s\u0131, <code>req<\/code> nesnesini iste\u011fe \u00f6zel verilerle geni\u015fletmek i\u00e7in m\u00fckemmel bir mekanizma sunar. Kendi \u00f6zel \u00f6zelliklerinizi <code>req<\/code> nesnesine ekleyerek, bir iste\u011fin ya\u015fam d\u00f6ng\u00fcs\u00fc boyunca veri ta\u015f\u0131yabilirsiniz.<\/p>\n<pre><code class=\"language-javascript\">\/\/ \u00d6zel bir ortakatman\napp.use((req, res, next) => {\n  req.requestTime = new Date().toISOString(); \/\/ \u0130stek zaman\u0131n\u0131 ekle\n  req.requestId = Math.random().toString(36).substring(7); \/\/ Benzersiz bir istek ID'si ekle\n  next();\n});\n\napp.get('\/log', (req, res) => {\n  res.send(<code>Bu istek ${req.requestTime} tarihinde yap\u0131ld\u0131. \u0130stek ID: ${req.requestId}<\/code>);\n});<\/code><\/pre>\n<p>Bu y\u00f6ntem, istek izleme, performans \u00f6l\u00e7\u00fcm\u00fc veya genel bir i\u015flem kimli\u011fi atamak gibi senaryolarda olduk\u00e7a faydal\u0131d\u0131r.<\/p>\n<h4>Dosya Y\u00fckleme (Multer ile req.file \/ req.files)<\/h4>\n<p>Dosya y\u00fckleme, genellikle <code>multipart\/form-data<\/code> i\u00e7erik t\u00fcr\u00fcyle ger\u00e7ekle\u015ftirilir. Express&#8217;in yerle\u015fik <code>body-parser<\/code>&#8216;\u0131 bu t\u00fcr verileri ayr\u0131\u015ft\u0131rmaz. <code>multer<\/code> gibi \u00fc\u00e7\u00fcnc\u00fc taraf ortakatmanlar, gelen dosyalar\u0131 ayr\u0131\u015ft\u0131r\u0131r ve bunlar\u0131 <code>req.file<\/code> (tek dosya i\u00e7in) veya <code>req.files<\/code> (\u00e7oklu dosya i\u00e7in) \u00f6zelliklerine ekler.<\/p>\n<pre><code class=\"language-javascript\">const multer = require('multer');\nconst upload = multer({ dest: 'uploads\/' }); \/\/ Dosyalar\u0131n y\u00fcklenece\u011fi dizin\n\napp.post('\/upload-single', upload.single('myFile'), (req, res) => {\n  if (req.file) {\n    res.send(<code>Dosya ba\u015far\u0131yla y\u00fcklendi: ${req.file.originalname}<\/code>);\n    console.log(req.file); \/\/ Y\u00fcklenen dosya hakk\u0131nda detayl\u0131 bilgi\n  } else {\n    res.status(400).send('Dosya y\u00fcklenemedi.');\n  }\n});\n\napp.post('\/upload-multiple', upload.array('myFiles', 5), (req, res) => {\n  if (req.files && req.files.length > 0) {\n    res.send(<code>${req.files.length} dosya ba\u015far\u0131yla y\u00fcklendi.<\/code>);\n    console.log(req.files); \/\/ Y\u00fcklenen dosyalar hakk\u0131nda detayl\u0131 bilgi\n  } else {\n    res.status(400).send('Dosya y\u00fcklenemedi.');\n  }\n});<\/code><\/pre>\n<p><code>req.file<\/code> veya <code>req.files<\/code> nesneleri, y\u00fcklenen dosyan\u0131n ad\u0131, boyutu, MIME t\u00fcr\u00fc ve ge\u00e7ici depolama yolu gibi bilgileri i\u00e7erir.<\/p>\n<h4>API S\u00fcr\u00fcmleme (req.headers veya req.accepts() ile)<\/h4>\n<p>B\u00fcy\u00fck API&#8217;lerde, geriye d\u00f6n\u00fck uyumlulu\u011fu korumak i\u00e7in API s\u00fcr\u00fcmleme \u00f6nemlidir. \u0130stemcinin hangi API s\u00fcr\u00fcm\u00fcn\u00fc istedi\u011fini belirtmek i\u00e7in <code>req<\/code> nesnesini kullanabilirsiniz.<\/p>\n<p>*   <strong>Custom Header (\u00d6zel Ba\u015fl\u0131k):<\/strong> <code>X-API-Version<\/code> gibi \u00f6zel bir HTTP ba\u015fl\u0131\u011f\u0131 kullanmak yayg\u0131n bir y\u00f6ntemdir.<\/p>\n<pre><code class=\"language-javascript\">app.get('\/api\/users', (req, res) => {\n      const apiVersion = req.get('X-API-Version');\n      if (apiVersion === '2') {\n        res.json({ version: '2.0', users: ['Alice', 'Bob'] });\n      } else { \/\/ Varsay\u0131lan veya v1\n        res.json({ version: '1.0', users: ['Alice'] });\n      }\n    });<\/code><\/pre>\n<p>*   <strong>Accept Header (Kabul Ba\u015fl\u0131\u011f\u0131):<\/strong> <code>Accept<\/code> ba\u015fl\u0131\u011f\u0131nda \u00f6zel bir MIME t\u00fcr\u00fc kullanmak (<code>application\/vnd.myapi.v1+json<\/code>).<\/p>\n<pre><code class=\"language-javascript\">app.get('\/api\/products', (req, res) => {\n      if (req.accepts('application\/vnd.myapi.v2+json')) {\n        res.json({ version: '2.0', products: [{id: 1, name: 'Product A'}] });\n      } else if (req.accepts('application\/vnd.myapi.v1+json')) {\n        res.json({ version: '1.0', products: [{name: 'Product A'}] });\n      } else {\n        res.status(406).send('Desteklenmeyen API s\u00fcr\u00fcm\u00fc.');\n      }\n    });<\/code><\/pre>\n<h4>\u00c7ok Dilli Uygulamalar (req.acceptsLanguages() ile)<\/h4>\n<p>Uluslararas\u0131 uygulamalarda, kullan\u0131c\u0131n\u0131n tercih etti\u011fi dili tespit etmek ve i\u00e7eri\u011fi buna g\u00f6re sunmak \u00f6nemlidir. <code>req.acceptsLanguages()<\/code> metodu, istemcinin <code>Accept-Language<\/code> ba\u015fl\u0131\u011f\u0131n\u0131 analiz ederek en uygun dili belirlemenize yard\u0131mc\u0131 olur.<\/p>\n<pre><code class=\"language-javascript\">const messages = {\n  'en': 'Hello, world!',\n  'tr': 'Merhaba d\u00fcnya!',\n  'es': '\u00a1Hola mundo!'\n};\n\napp.get('\/greeting', (req, res) => {\n  const preferredLanguage = req.acceptsLanguages(['tr', 'en', 'es']);\n  if (preferredLanguage && messages[preferredLanguage]) {\n    res.send(messages[preferredLanguage]);\n  } else {\n    res.send(messages['en']); \/\/ Varsay\u0131lan dil\n  }\n});<\/code><\/pre>\n<p>Bu sayede, kullan\u0131c\u0131n\u0131n taray\u0131c\u0131 ayarlar\u0131ndan gelen dil tercihi dikkate al\u0131narak daha ki\u015fiselle\u015ftirilmi\u015f bir deneyim sunulabilir.<\/p>\n<h3>G\u00fcvenlik ve req Nesnesi<\/h3>\n<p><code>req<\/code> nesnesi, istemciden gelen t\u00fcm verileri i\u00e7erdi\u011finden, g\u00fcvenlik a\u00e7\u0131s\u0131ndan dikkatli kullan\u0131lmas\u0131 gereken kritik bir kaynakt\u0131r. G\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 \u00f6nlemek i\u00e7in <code>req<\/code> nesnesinden al\u0131nan verilerin her zaman do\u011frulanmas\u0131 ve temizlenmesi (sanitizasyon) gerekir.<\/p>\n<h4>Giri\u015f Do\u011frulama ve Sanitizasyon<\/h4>\n<p><code>req.params<\/code>, <code>req.query<\/code> ve <code>req.body<\/code> \u00fczerinden gelen t\u00fcm kullan\u0131c\u0131 giri\u015fleri, uygulaman\u0131z\u0131n g\u00fcvenli\u011fi i\u00e7in potansiyel risk ta\u015f\u0131r. Bu verilerin her zaman beklenilen format, tip ve s\u0131n\u0131rlar i\u00e7inde olup olmad\u0131\u011f\u0131n\u0131 do\u011frulamak (validation) ve zararl\u0131 karakterlerden ar\u0131nd\u0131rmak (sanitization) hayati \u00f6neme sahiptir.<\/p>\n<p>*   <strong>Do\u011frulama (Validation):<\/strong> Gelen verilerin uygulaman\u0131z\u0131n bekledi\u011fi kurallara uygunlu\u011funu kontrol etmek. \u00d6rne\u011fin, bir e-posta adresinin ge\u00e7erli bir formatta olup olmad\u0131\u011f\u0131n\u0131, bir ya\u015f de\u011ferinin say\u0131sal ve belirli bir aral\u0131kta olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek. <code>express-validator<\/code> veya <code>Joi<\/code> gibi k\u00fct\u00fcphaneler bu konuda yard\u0131mc\u0131 olur.<\/p>\n<pre><code class=\"language-javascript\">const { body, validationResult } = require('express-validator');\n\n    app.post('\/user', [\n      body('username').isLength({ min: 3 }).trim().escape(),\n      body('email').isEmail().normalizeEmail(),\n      body('password').isLength({ min: 6 })\n    ], (req, res) => {\n      const errors = validationResult(req);\n      if (!errors.isEmpty()) {\n        return res.status(400).json({ errors: errors.array() });\n      }\n      \/\/ Veriler ge\u00e7erli, g\u00fcvenli bir \u015fekilde kullan\u0131labilir\n      res.status(201).send('Kullan\u0131c\u0131 olu\u015fturuldu.');\n    });<\/code><\/pre>\n<p>*   <strong>Sanitizasyon (Sanitization):<\/strong> Gelen verilerden potansiyel olarak zararl\u0131 karakterleri veya kodlar\u0131 kald\u0131rmak. \u00d6rne\u011fin, HTML etiketlerini veya SQL enjeksiyonu giri\u015fimlerini temizlemek. <code>express-validator<\/code>&#8216;daki <code>escape()<\/code> gibi metotlar XSS sald\u0131r\u0131lar\u0131na kar\u015f\u0131 koruma sa\u011flar.<\/p>\n<h4>XSS (Cross-Site Scripting) ve CSRF (Cross-Site Request Forgery) Korumas\u0131<\/h4>\n<p><code>req<\/code> nesnesinden al\u0131nan veriler do\u011frudan HTML \u00e7\u0131kt\u0131s\u0131na yerle\u015ftirildi\u011finde XSS sald\u0131r\u0131lar\u0131na yol a\u00e7abilir. Bu nedenle, kullan\u0131c\u0131 taraf\u0131ndan sa\u011flanan herhangi bir metni HTML&#8217;e d\u00f6n\u00fc\u015ft\u00fcrmeden \u00f6nce her zaman temizlemek veya ka\u00e7\u0131\u015f karakterlerini kullanmak (escaping) \u00f6nemlidir.<\/p>\n<p>CSRF sald\u0131r\u0131lar\u0131, kimli\u011fi do\u011frulanm\u0131\u015f bir kullan\u0131c\u0131n\u0131n bilgisi d\u0131\u015f\u0131nda istek g\u00f6ndermesini hedefler. <code>req.headers<\/code> ve <code>req.body<\/code> kullan\u0131larak CSRF belirte\u00e7leri (token) kontrol edilerek bu t\u00fcr sald\u0131r\u0131lar \u00f6nlenebilir. <code>csurf<\/code> gibi ortakatmanlar bu korumay\u0131 otomatik olarak sa\u011flar.<\/p>\n<h4>Rate Limiting (\u0130stek S\u0131n\u0131rlama)<\/h4>\n<p><code>req.ip<\/code> \u00f6zelli\u011fini kullanarak belirli bir IP adresinden gelen isteklerin say\u0131s\u0131n\u0131 s\u0131n\u0131rlayabilirsiniz. Bu, kaba kuvvet sald\u0131r\u0131lar\u0131n\u0131 veya hizmet reddi (DoS) sald\u0131r\u0131lar\u0131n\u0131 \u00f6nlemeye yard\u0131mc\u0131 olur. <code>express-rate-limit<\/code> gibi k\u00fct\u00fcphaneler bu i\u015flevi kolayca entegre etmenizi sa\u011flar.<\/p>\n<pre><code class=\"language-javascript\">const rateLimit = require('express-rate-limit');\n\nconst limiter = rateLimit({\n  windowMs: 15 <em> 60 <\/em> 1000, \/\/ 15 dakika\n  max: 100, \/\/ Her IP'den 15 dakika i\u00e7inde maksimum 100 istek\n  message: '\u00c7ok fazla istek, l\u00fctfen daha sonra tekrar deneyin.'\n});\n\n\/\/ Belirli rotalara rate limiter uygula\napp.use('\/api\/', limiter);\n\napp.get('\/api\/data', (req, res) => {\n  res.send('API verileri.');\n});<\/code><\/pre>\n<h3>S\u0131k\u00e7a Yap\u0131lan Hatalar ve \u00c7\u00f6z\u00fcmleri<\/h3>\n<p><code>req<\/code> nesnesini kullan\u0131rken geli\u015ftiricilerin s\u0131k\u00e7a yapt\u0131\u011f\u0131 baz\u0131 hatalar vard\u0131r. Bu hatalar\u0131 bilmek ve \u00f6nlemek, daha sa\u011flam ve g\u00fcvenli Express uygulamalar\u0131 geli\u015ftirmenize yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h4>Body Parser Olmadan req.body&#8217;ye Eri\u015fmeye \u00c7al\u0131\u015fmak<\/h4>\n<p><strong>Hata:<\/strong> <code>POST<\/code> veya <code>PUT<\/code> isteklerinde <code>req.body<\/code>&#8216;ye eri\u015fmeye \u00e7al\u0131\u015fmak, ancak uygun bir body parser ortakatman\u0131n\u0131 uygulaman\u0131za eklememi\u015f olmak. Bu durumda <code>req.body<\/code> <code>undefined<\/code> olacakt\u0131r.<\/p>\n<p><strong>\u00c7\u00f6z\u00fcm:<\/strong> Express 4.16.0 ve \u00fczeri s\u00fcr\u00fcmlerinde <code>express.json()<\/code> ve <code>express.urlencoded()<\/code> ortakatmanlar\u0131n\u0131 kullan\u0131n.<\/p>\n<pre><code class=\"language-javascript\">const express = require('express');\nconst app = express();\n\n\/\/ \u00c7\u00f6z\u00fcm: Bu sat\u0131rlar\u0131 ekleyin\napp.use(express.json()); \/\/ JSON istek g\u00f6vdeleri i\u00e7in\napp.use(express.urlencoded({ extended: true })); \/\/ URL-encoded form verileri i\u00e7in\n\napp.post('\/data', (req, res) => {\n  \/\/ \u015eimdi req.body'ye eri\u015febilirsiniz\n  console.log(req.body);\n  res.send('Veri al\u0131nd\u0131.');\n});<\/code><\/pre>\n<p>Dosya y\u00fcklemeleri i\u00e7in <code>multer<\/code> gibi \u00f6zel bir ortakatman kullanman\u0131z gerekti\u011fini unutmay\u0131n.<\/p>\n<h4>Parametre ve Sorgu Dizisi Aras\u0131ndaki Fark\u0131 Kar\u0131\u015ft\u0131rmak<\/h4>\n<p><strong>Hata:<\/strong> URL&#8217;deki dinamik segmentler (<code>\/users\/:id<\/code>) ile sorgu dizisi parametrelerini (<code>\/users?status=active<\/code>) kar\u0131\u015ft\u0131rmak. \u00d6rne\u011fin, bir dinamik parametre i\u00e7in <code>req.query.id<\/code> kullanmaya \u00e7al\u0131\u015fmak veya sorgu dizisi parametresi i\u00e7in <code>req.params.status<\/code> kullanmaya \u00e7al\u0131\u015fmak.<\/p>\n<p><strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n*   Dinamik URL segmentleri i\u00e7in <strong><code>req.params<\/code><\/strong> kullan\u0131n.<br \/>\n    *   Rota: <code>\/products\/:productId<\/code><br \/>\n    *   URL: <code>\/products\/123<\/code><br \/>\n    *   Eri\u015fim: <code>req.params.productId<\/code><br \/>\n*   Sorgu dizisi parametreleri i\u00e7in <strong><code>req.query<\/code><\/strong> kullan\u0131n.<br \/>\n    *   Rota: <code>\/search<\/code><br \/>\n    *   URL: <code>\/search?q=kitap&page=2<\/code><br \/>\n    *   Eri\u015fim: <code>req.query.q<\/code>, <code>req.query.page<\/code><\/p>\n<h4>G\u00fcvenlik A\u00e7\u0131klar\u0131n\u0131 G\u00f6z Ard\u0131 Etmek<\/h4>\n<p><strong>Hata:<\/strong> <code>req<\/code> nesnesinden gelen kullan\u0131c\u0131 giri\u015flerini do\u011frulamadan veya temizlemeden do\u011frudan veritaban\u0131na kaydetmek, HTML \u00e7\u0131kt\u0131s\u0131na basmak veya di\u011fer i\u015flemler i\u00e7in kullanmak. Bu, SQL enjeksiyonu, XSS veya di\u011fer g\u00fcvenlik a\u00e7\u0131klar\u0131na yol a\u00e7abilir.<\/p>\n<p><strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n*   <strong>Her zaman<\/strong> <code>req.params<\/code>, <code>req.query<\/code>, <code>req.body<\/code>&#8216;den gelen t\u00fcm kullan\u0131c\u0131 giri\u015flerini <strong>do\u011frulay\u0131n (validate)<\/strong> ve <strong>temizleyin (sanitize)<\/strong>.<br \/>\n*   Kullan\u0131c\u0131 giri\u015fini veritaban\u0131na kaydetmeden \u00f6nce parametreli sorgular veya ORM&#8217;ler kullan\u0131n.<br \/>\n*   Kullan\u0131c\u0131 giri\u015fini HTML \u00e7\u0131kt\u0131s\u0131na basmadan \u00f6nce uygun ka\u00e7\u0131\u015f (escaping) mekanizmalar\u0131n\u0131 kullan\u0131n.<br \/>\n*   Kimlik do\u011frulama ve yetkilendirme i\u00e7in g\u00fc\u00e7l\u00fc ortakatmanlar kullan\u0131n.<br \/>\n*   Rate limiting ve di\u011fer g\u00fcvenlik \u00f6nlemlerini uygulay\u0131n.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p><code>req<\/code> nesnesi, Express.js \u00e7er\u00e7evesinin kalbinde yer alan, gelen HTTP iste\u011fi hakk\u0131nda zengin ve kapsaml\u0131 bilgi sa\u011flayan temel bir yap\u0131d\u0131r. Bu makalede, <code>req.params<\/code>, <code>req.query<\/code>, <code>req.body<\/code>, <code>req.headers<\/code> gibi temel \u00f6zelliklerden <code>req.accepts()<\/code>, <code>req.get()<\/code>, <code>req.is()<\/code> gibi metotlara kadar bir\u00e7ok y\u00f6n\u00fcn\u00fc ele ald\u0131k. Ayr\u0131ca, kimlik do\u011frulama, dosya y\u00fckleme, API s\u00fcr\u00fcmleme ve \u00e7ok dilli uygulamalar gibi geli\u015fmi\u015f kullan\u0131m senaryolar\u0131nda <code>req<\/code> nesnesinin nas\u0131l kullan\u0131labilece\u011fini g\u00f6sterdik.<\/p>\n<p>Unutulmamal\u0131d\u0131r ki, <code>req<\/code> nesnesinden al\u0131nan t\u00fcm kullan\u0131c\u0131 giri\u015fleri potansiyel g\u00fcvenlik riski ta\u015f\u0131r. Bu nedenle, giri\u015f do\u011frulama, sanitizasyon ve di\u011fer g\u00fcvenlik en iyi uygulamalar\u0131n\u0131 titizlikle uygulamak, sa\u011flam ve g\u00fcvenli Express uygulamalar\u0131 geli\u015ftirmenin anahtar\u0131d\u0131r. <code>req<\/code> nesnesini do\u011fru ve bilin\u00e7li bir \u015fekilde kullanarak, her t\u00fcrl\u00fc gelen iste\u011fi etkin bir \u015fekilde i\u015fleyebilir, uygulaman\u0131z\u0131n mant\u0131\u011f\u0131n\u0131 esnek bir \u015fekilde kurabilir ve kullan\u0131c\u0131lar\u0131n\u0131za daha iyi bir deneyim sunabilirsiniz. Express&#8217;in g\u00fcc\u00fcn\u00fc tam anlam\u0131yla kullanmak i\u00e7in <code>req<\/code> nesnesinin derinlemesine anla\u015f\u0131lmas\u0131 vazge\u00e7ilmezdir.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Express&#8217;te req Nesnesi Nas\u0131l Kullan\u0131l\u0131r? Kapsaml\u0131 Bir Rehber\nGiri\u015f: req Nesnesine Genel Bak\u0131\u015f\nExpress.js, Node.js i\u00e7in minimalist ve esnek b","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":[1],"tags":[],"class_list":{"0":"post-39400","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","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>Express&#039;te req Nesnesi Nas\u0131l Kullan\u0131l\u0131r? Kapsaml\u0131 Bir Rehber - 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\/expresste-req-nesnesi-nasil-kullanilir-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Express&#039;te req Nesnesi Nas\u0131l Kullan\u0131l\u0131r? Kapsaml\u0131 Bir Rehber\" \/>\n<meta property=\"og:description\" content=\"Express&#039;te req Nesnesi Nas\u0131l Kullan\u0131l\u0131r? Kapsaml\u0131 Bir Rehber Giri\u015f: req Nesnesine Genel Bak\u0131\u015f Express.js, Node.js i\u00e7in minimalist ve esnek b\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/expresste-req-nesnesi-nasil-kullanilir-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-20T13:40:51+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=\"20 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/expresste-req-nesnesi-nasil-kullanilir-kapsamli-bir-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/expresste-req-nesnesi-nasil-kullanilir-kapsamli-bir-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Express&#8217;te req Nesnesi Nas\u0131l Kullan\u0131l\u0131r? Kapsaml\u0131 Bir Rehber\",\"datePublished\":\"2026-02-20T13:40:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/expresste-req-nesnesi-nasil-kullanilir-kapsamli-bir-rehber\/\"},\"wordCount\":2589,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/expresste-req-nesnesi-nasil-kullanilir-kapsamli-bir-rehber\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/expresste-req-nesnesi-nasil-kullanilir-kapsamli-bir-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/expresste-req-nesnesi-nasil-kullanilir-kapsamli-bir-rehber\/\",\"name\":\"Express'te req Nesnesi Nas\u0131l Kullan\u0131l\u0131r? Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-20T13:40:51+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/expresste-req-nesnesi-nasil-kullanilir-kapsamli-bir-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/expresste-req-nesnesi-nasil-kullanilir-kapsamli-bir-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/expresste-req-nesnesi-nasil-kullanilir-kapsamli-bir-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Express&#8217;te req Nesnesi Nas\u0131l Kullan\u0131l\u0131r? Kapsaml\u0131 Bir Rehber\"}]},{\"@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":"Express'te req Nesnesi Nas\u0131l Kullan\u0131l\u0131r? Kapsaml\u0131 Bir Rehber - 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\/expresste-req-nesnesi-nasil-kullanilir-kapsamli-bir-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"Express'te req Nesnesi Nas\u0131l Kullan\u0131l\u0131r? Kapsaml\u0131 Bir Rehber","og_description":"Express'te req Nesnesi Nas\u0131l Kullan\u0131l\u0131r? Kapsaml\u0131 Bir Rehber Giri\u015f: req Nesnesine Genel Bak\u0131\u015f Express.js, Node.js i\u00e7in minimalist ve esnek b","og_url":"https:\/\/fatihsoysal.com\/blog\/expresste-req-nesnesi-nasil-kullanilir-kapsamli-bir-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-20T13:40:51+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"20 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/expresste-req-nesnesi-nasil-kullanilir-kapsamli-bir-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/expresste-req-nesnesi-nasil-kullanilir-kapsamli-bir-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Express&#8217;te req Nesnesi Nas\u0131l Kullan\u0131l\u0131r? Kapsaml\u0131 Bir Rehber","datePublished":"2026-02-20T13:40:51+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/expresste-req-nesnesi-nasil-kullanilir-kapsamli-bir-rehber\/"},"wordCount":2589,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/expresste-req-nesnesi-nasil-kullanilir-kapsamli-bir-rehber\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/expresste-req-nesnesi-nasil-kullanilir-kapsamli-bir-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/expresste-req-nesnesi-nasil-kullanilir-kapsamli-bir-rehber\/","name":"Express'te req Nesnesi Nas\u0131l Kullan\u0131l\u0131r? Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-20T13:40:51+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/expresste-req-nesnesi-nasil-kullanilir-kapsamli-bir-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/expresste-req-nesnesi-nasil-kullanilir-kapsamli-bir-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/expresste-req-nesnesi-nasil-kullanilir-kapsamli-bir-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Express&#8217;te req Nesnesi Nas\u0131l Kullan\u0131l\u0131r? Kapsaml\u0131 Bir Rehber"}]},{"@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\/39400","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=39400"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39400\/revisions"}],"predecessor-version":[{"id":39401,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39400\/revisions\/39401"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=39400"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=39400"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=39400"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}