{"id":34632,"date":"2025-11-20T01:01:05","date_gmt":"2025-11-19T22:01:05","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/nuxt-middleware-nedir-ve-neden-hayat-kurtarir\/"},"modified":"2025-11-20T01:01:05","modified_gmt":"2025-11-19T22:01:05","slug":"nuxt-middleware-nedir-ve-neden-hayat-kurtarir","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/nuxt-middleware-nedir-ve-neden-hayat-kurtarir\/","title":{"rendered":"Nuxt Middleware Nedir ve Neden Hayat Kurtar\u0131r?"},"content":{"rendered":"<p class=\"article-title\">Nuxt Uygulamalar\u0131n\u0131zda Middleware G\u00fcc\u00fc: Rotay\u0131 Y\u00f6netmek<\/p>\n<p>Nuxt.js uygulamalar\u0131nda rota ge\u00e7i\u015flerini nas\u0131l ele alaca\u011f\u0131n\u0131z\u0131, kullan\u0131c\u0131 yetkilendirmeyi ve oturum y\u00f6netimini middleware ile nas\u0131l kolayla\u015ft\u0131raca\u011f\u0131n\u0131z\u0131 merak ediyor musunuz? Bu makale, Nuxt Middleware&#8217;in temelden ileri seviyeye t\u00fcm y\u00f6nlerini pratik \u00f6rneklerle a\u00e7\u0131klayarak, Nuxt uygulamalar\u0131n\u0131zda kontrol\u00fc ele alman\u0131z\u0131 sa\u011flayacak.<\/p>\n<p>Web geli\u015ftirmenin dinamik d\u00fcnyas\u0131nda, kullan\u0131c\u0131 deneyimini zenginle\u015ftirmek ve uygulama g\u00fcvenli\u011fini sa\u011flamak i\u00e7in s\u00fcrekli yeni yakla\u015f\u0131mlar aramaktay\u0131z. Modern web uygulamalar\u0131nda kullan\u0131c\u0131 kimlik do\u011frulamas\u0131, yetkilendirme, dil tespiti veya belirli bir kullan\u0131c\u0131n\u0131n belirli bir sayfaya eri\u015fimini kontrol etmek gibi i\u015flemler olduk\u00e7a yayg\u0131nd\u0131r. Bu t\u00fcr mant\u0131ksal denetimler, genellikle bir kullan\u0131c\u0131 bir sayfaya eri\u015fmeye \u00e7al\u0131\u015ft\u0131\u011f\u0131nda, yani bir rota ge\u00e7i\u015fi s\u0131ras\u0131nda ger\u00e7ekle\u015fir. \u0130\u015fte tam bu noktada Nuxt Middleware devreye girer ve hayat kurtaran bir ara\u00e7 haline gelir. Middleware, Nuxt.js uygulamalar\u0131nda bir rota y\u00fcklenmeden \u00f6nce veya y\u00fcklendikten sonra \u00e7al\u0131\u015ft\u0131r\u0131lan \u00f6zel fonksiyonlard\u0131r. Ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi, &#8220;ara katman&#8221; i\u015flevi g\u00f6rerek, istemci iste\u011fi ile sunucu yan\u0131t\u0131 aras\u0131na girer ve gerekli mant\u0131ksal kontrolleri veya veri manip\u00fclasyonlar\u0131n\u0131 yapar.<\/p>\n<p>Bir Nuxt uygulamas\u0131nda, kullan\u0131c\u0131 bir sayfaya gitmek istedi\u011finde, bu istek Nuxt&#8217;\u0131n dahili y\u00f6nlendirme (routing) sisteminden ge\u00e7er. Middleware, bu y\u00f6nlendirme ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fcn belirli a\u015famalar\u0131na m\u00fcdahale etmenizi sa\u011flar. Bu m\u00fcdahale sayesinde, \u00f6rne\u011fin bir kullan\u0131c\u0131n\u0131n oturum a\u00e7\u0131p a\u00e7mad\u0131\u011f\u0131n\u0131 kontrol edebilir, belirli bir role sahip olup olmad\u0131\u011f\u0131n\u0131 do\u011frulayabilir veya belirli bir dil parametresi yoksa varsay\u0131lan bir dil atayabilirsiniz. T\u00fcm bu i\u015flemleri, ilgili sayfa bile\u015feninin kendi i\u00e7inde tekrarlamak yerine, merkezi bir noktada tan\u0131mlayarak kod tekrar\u0131n\u0131 \u00f6nler ve uygulaman\u0131z\u0131n daha mod\u00fcler, okunabilir ve y\u00f6netilebilir olmas\u0131n\u0131 sa\u011flars\u0131n\u0131z. Ger\u00e7ek d\u00fcnya senaryosunda, d\u00fc\u015f\u00fcn\u00fcn ki bir e-ticaret siteniz var. Kullan\u0131c\u0131lar, &#8220;sepetim&#8221; sayfas\u0131na sadece oturum a\u00e7m\u0131\u015flarsa eri\u015febilmelidir. Ya da &#8220;y\u00f6netici paneli&#8221; sayfas\u0131na yaln\u0131zca &#8220;admin&#8221; rol\u00fcne sahip kullan\u0131c\u0131lar girebilmelidir. Bu t\u00fcr kontrolleri her sayfan\u0131n <code>mounted<\/code> veya <code>created<\/code> ya\u015fam d\u00f6ng\u00fcs\u00fc kancalar\u0131nda tek tek yapmak yerine, bunlar\u0131 Nuxt Middleware olarak tan\u0131mlamak, kodunuzu \u00e7ok daha temiz ve s\u00fcrd\u00fcr\u00fclebilir hale getirir. Herhangi bir g\u00fcvenlik a\u00e7\u0131\u011f\u0131n\u0131 \u00f6nlemek i\u00e7in merkezi bir do\u011frulama mekanizmas\u0131 kurmak, geli\u015ftirme s\u00fcrecinde zaman kazand\u0131r\u0131rken, ayn\u0131 zamanda uygulaman\u0131n genel g\u00fcvenli\u011fini de art\u0131r\u0131r. Dolay\u0131s\u0131yla, Nuxt Middleware sadece bir kod d\u00fczenleme arac\u0131 de\u011fil, ayn\u0131 zamanda uygulama mant\u0131\u011f\u0131n\u0131z\u0131 daha g\u00fcvenli ve verimli bir \u015fekilde uygulaman\u0131z\u0131 sa\u011flayan stratejik bir bile\u015fendir.<\/p>\n<h2>Nuxt.js&#8217;te Middleware \u00c7e\u015fitleri Nelerdir ve Nas\u0131l Kullan\u0131l\u0131r?<\/h2>\n<p>Nuxt.js, geli\u015ftiricilere esneklik sa\u011flamak amac\u0131yla farkl\u0131 middleware kullan\u0131m senaryolar\u0131 sunar. Bu senaryolar, uygulaman\u0131z\u0131n genelinde ge\u00e7erli olacak kurallardan, belirli bir sayfan\u0131n \u00f6zel ihtiya\u00e7lar\u0131na y\u00f6nelik kontrollere kadar geni\u015f bir yelpazeyi kapsar. Her bir middleware t\u00fcr\u00fcn\u00fcn kendi kullan\u0131m amac\u0131 ve uygulama y\u00f6ntemi bulunur, bu da geli\u015ftiricilerin do\u011fru arac\u0131 do\u011fru yerde kullanmas\u0131n\u0131 m\u00fcmk\u00fcn k\u0131lar. \u015eimdi bu \u00e7e\u015fitleri ve nas\u0131l uyguland\u0131klar\u0131n\u0131 ad\u0131m ad\u0131m inceleyelim.<\/p>\n<h3>Global Middleware: Her Rota \u0130\u00e7in Ortak Kurallar Nas\u0131l Belirlenir?<\/h3>\n<p>Global middleware&#8217;ler, Nuxt uygulaman\u0131zdaki her rota ge\u00e7i\u015finde, yani her sayfa y\u00fcklemesinde otomatik olarak \u00e7al\u0131\u015fan fonksiyonlard\u0131r. Bu t\u00fcr middleware&#8217;ler, uygulaman\u0131z\u0131n genelinde ge\u00e7erli olmas\u0131 gereken mant\u0131ksal kontroller i\u00e7in idealdir. \u00d6rne\u011fin, t\u00fcm kullan\u0131c\u0131lar\u0131n oturum durumunu kontrol etmek, dil tercihini belirlemek veya belirli bir bak\u0131m modunda olup olmad\u0131\u011f\u0131n\u0131z\u0131 denetlemek gibi senaryolarda global middleware harika bir \u00e7\u00f6z\u00fcmd\u00fcr.<\/p>\n<p>Global middleware tan\u0131mlamak i\u00e7in \u00f6ncelikle projenizin k\u00f6k dizininde <code>middleware\/<\/code> ad\u0131nda bir klas\u00f6r olu\u015fturman\u0131z gerekir. Ard\u0131ndan, bu klas\u00f6r\u00fcn i\u00e7ine bir JavaScript dosyas\u0131 (\u00f6rne\u011fin, <code>auth.js<\/code> veya <code>locale.js<\/code>) yerle\u015ftirirsiniz. Bu dosyan\u0131n i\u00e7inde, <code>context<\/code> objesini parametre olarak alan bir fonksiyonu varsay\u0131lan (<code>default<\/code>) olarak d\u0131\u015fa aktar\u0131rs\u0131n\u0131z. <code>context<\/code> objesi, Nuxt&#8217;\u0131n ge\u00e7erli istek hakk\u0131ndaki t\u00fcm \u00f6nemli bilgileri (store, app, redirect, route, req, res vb.) i\u00e7erir ve middleware i\u00e7inde bu bilgilere eri\u015ferek \u00e7e\u015fitli i\u015flemler yapman\u0131z\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-javascript\">\/\/ middleware\/auth.js\nexport default function ({ store, redirect, route }) {\n  \/\/ E\u011fer kullan\u0131c\u0131 giri\u015f yapmam\u0131\u015fsa\n  if (!store.state.auth.loggedIn) {\n    \/\/ ve mevcut rota \"login\" veya \"register\" de\u011filse\n    if (route.name !== &#039;login&#039; && route.name !== &#039;register&#039;) {\n      \/\/ Kullan\u0131c\u0131y\u0131 giri\u015f sayfas\u0131na y\u00f6nlendir\n      return redirect(&#039;\/login&#039;);\n    }\n  } else {\n    \/\/ E\u011fer kullan\u0131c\u0131 giri\u015f yapm\u0131\u015fsa\n    \/\/ ve mevcut rota \"login\" veya \"register\" ise\n    if (route.name === &#039;login&#039; || route.name === &#039;register&#039;) {\n      \/\/ Kullan\u0131c\u0131y\u0131 anasayfaya veya profil sayfas\u0131na y\u00f6nlendir\n      return redirect(&#039;\/&#039;);\n    }\n  }\n}<\/pre>\n<p><\/code><\/p>\n<p>Bu <code>auth.js<\/code> middleware'i, kullan\u0131c\u0131 oturum durumunu kontrol eder ve duruma g\u00f6re y\u00f6nlendirmeler yapar. Peki, Nuxt'a bu middleware'in global olarak \u00e7al\u0131\u015fmas\u0131 gerekti\u011fini nas\u0131l s\u00f6yleriz? Bunun i\u00e7in <code>nuxt.config.js<\/code> dosyan\u0131zda <code>router.middleware<\/code> \u00f6zelli\u011fini kullanman\u0131z gerekir:<\/p>\n<pre><code class=\"language-javascript\">\/\/ nuxt.config.js\nexport default {\n  \/\/ ... di\u011fer yap\u0131land\u0131rmalar\u0131n\u0131z\n  router: {\n    middleware: [&#039;auth&#039;] \/\/ &#039;auth&#039; middleware&#039;ini global olarak kaydet\n  },\n  \/\/ ...\n}<\/pre>\n<p><\/code><\/p>\n<p>Bu yap\u0131land\u0131rma ile, Nuxt uygulaman\u0131zda her rota ge\u00e7i\u015finde <code>auth.js<\/code> i\u00e7indeki fonksiyon otomatik olarak \u00e7al\u0131\u015ft\u0131r\u0131lacakt\u0131r. Bu, uygulaman\u0131z\u0131n t\u00fcm sayfalar\u0131nda tutarl\u0131 bir oturum kontrol\u00fc sa\u011flamak i\u00e7in olduk\u00e7a etkili bir y\u00f6ntemdir. Ayr\u0131ca, birden fazla global middleware'iniz varsa, bunlar\u0131 bir dizi i\u00e7inde s\u0131ralayabilirsiniz; Nuxt, bunlar\u0131 tan\u0131mlad\u0131\u011f\u0131n\u0131z s\u0131raya g\u00f6re \u00e7al\u0131\u015ft\u0131racakt\u0131r. \u00d6rne\u011fin: <code>middleware: [&#039;auth&#039;, &#039;locale&#039;]<\/code>. Bu sayede, uygulaman\u0131z\u0131n her noktas\u0131nda g\u00fcvenli ve tutarl\u0131 bir kullan\u0131c\u0131 deneyimi sunabilirsiniz.<\/p>\n<h3>Rota (Named) Middleware: Belirli Sayfalar \u0130\u00e7in \u00d6zel Kontroller Nas\u0131l Yap\u0131l\u0131r?<\/h3>\n<p>Global middleware'ler her rota i\u00e7in ge\u00e7erli genel kurallar belirlerken, bazen uygulaman\u0131zda yaln\u0131zca belirli sayfalara \u00f6zg\u00fc kontroller yapman\u0131z gerekebilir. \u0130\u015fte bu noktada rota tabanl\u0131 (named) middleware'ler devreye girer. Bu middleware'ler, sadece kendilerine atand\u0131\u011f\u0131 sayfa veya layout'lar i\u00e7in \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r ve b\u00f6ylece daha gran\u00fcler kontrol imkan\u0131 sunar.<\/p>\n<p>Rota middleware'i tan\u0131mlamak i\u00e7in yine <code>middleware\/<\/code> klas\u00f6r\u00fcn\u00fc kullan\u0131r\u0131z. \u00d6rne\u011fin, yaln\u0131zca y\u00f6neticilerin eri\u015febilece\u011fi bir sayfa i\u00e7in <code>admin-only.js<\/code> ad\u0131nda bir middleware olu\u015fturabiliriz:<\/p>\n<pre><code class=\"language-javascript\">\/\/ middleware\/admin-only.js\nexport default function ({ store, redirect }) {\n  \/\/ Kullan\u0131c\u0131n\u0131n y\u00f6netici rol\u00fcnde olup olmad\u0131\u011f\u0131n\u0131 kontrol et\n  if (!store.state.user || store.state.user.role !== &#039;admin&#039;) {\n    \/\/ E\u011fer de\u011filse, anasayfaya veya yetkisiz eri\u015fim sayfas\u0131na y\u00f6nlendir\n    return redirect(&#039;\/&#039;);\n  }\n}<\/pre>\n<p><\/code><\/p>\n<p>Bu middleware'i bir sayfaya atamak i\u00e7in, ilgili sayfa bile\u015feninin <code>middleware<\/code> \u00f6zelli\u011fini kullan\u0131r\u0131z. \u00d6rne\u011fin, <code>pages\/admin\/dashboard.vue<\/code> sayfas\u0131 i\u00e7in:<\/p>\n<pre><code class=\"language-html\"><!-- pages\/admin\/dashboard.vue -->\n<template>\n  <div>\n    <h1>Y\u00f6netici Paneli<\/h1>\n    <p>Sadece y\u00f6neticiler bu sayfay\u0131 g\u00f6rebilir.<\/p>\n  <\/div>\n<\/template>\n\n<script>\nexport default {\n  middleware: &#039;admin-only&#039; \/\/ admin-only middleware&#039;ini bu sayfaya uygula\n}\n<\/script><\/pre>\n<p><\/code><\/p>\n<p>Birden fazla rota middleware'i kullanman\u0131z gerekiyorsa, bunlar\u0131 bir dizi i\u00e7inde belirtebilirsiniz: <code>middleware: [&#039;auth&#039;, &#039;admin-only&#039;]<\/code>. Nuxt, bu middleware'leri tan\u0131mlad\u0131\u011f\u0131n\u0131z s\u0131raya g\u00f6re \u00e7al\u0131\u015ft\u0131racakt\u0131r. Bu y\u00f6ntem, her sayfan\u0131n ihtiya\u00e7lar\u0131na g\u00f6re \u00f6zel g\u00fcvenlik veya mant\u0131ksal denetimler eklemenize olanak tan\u0131r, bu da uygulaman\u0131z\u0131n hem esnekli\u011fini hem de g\u00fcvenli\u011fini art\u0131r\u0131r. B\u00f6ylece, gereksiz kontrolleri t\u00fcm sayfalarda \u00e7al\u0131\u015ft\u0131rmaktan ka\u00e7\u0131narak performans avantaj\u0131 da sa\u011flayabilirsiniz. \u00d6rne\u011fin, bir \"\u00fcr\u00fcn detay\" sayfas\u0131nda y\u00f6netici kontrol\u00fcne ihtiya\u00e7 duymazken, bir \"\u00fcr\u00fcn d\u00fczenleme\" sayfas\u0131nda bu kontrole kesinlikle ihtiyac\u0131n\u0131z olacakt\u0131r. Bu esneklik, b\u00fcy\u00fck ve karma\u015f\u0131k uygulamalar\u0131n y\u00f6netimini olduk\u00e7a kolayla\u015ft\u0131r\u0131r.<\/p>\n<h3>Inline Middleware: Anl\u0131k \u00c7\u00f6z\u00fcmler \u0130\u00e7in Ne Zaman Tercih Edilmeli?<\/h3>\n<p>Nuxt.js, global ve rota tabanl\u0131 middleware'lerin yan\u0131 s\u0131ra, sayfa veya layout bile\u015fenlerinin do\u011frudan i\u00e7inde tan\u0131mlanabilen \"inline middleware\" imkan\u0131 da sunar. Inline middleware'ler, ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi, middleware mant\u0131\u011f\u0131n\u0131 ayr\u0131 bir dosyada tan\u0131mlamak yerine, do\u011frudan ilgili bile\u015fenin <code>middleware<\/code> \u00f6zelli\u011fi i\u00e7inde anonim bir fonksiyon olarak yazman\u0131z\u0131 sa\u011flar. Bu yakla\u015f\u0131m, \u00f6zellikle \u00e7ok k\u0131sa, tek kullan\u0131ml\u0131k veya sadece o belirli bile\u015fene \u00f6zg\u00fc basit kontroller i\u00e7in olduk\u00e7a kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<p>\u00d6rne\u011fin, bir sayfan\u0131n sadece belirli bir HTTP parametresi ile eri\u015filebilir olmas\u0131n\u0131 istedi\u011finiz basit bir senaryoda inline middleware kullanabilirsiniz. Diyelim ki, <code>pages\/urunler\/_id.vue<\/code> sayfan\u0131z var ve bu sayfaya sadece <code>?preview=true<\/code> parametresiyle eri\u015filmesini istiyorsunuz:<\/p>\n<pre><code class=\"language-html\"><!-- pages\/urunler\/_id.vue -->\n<template>\n  <div>\n    <h1>\u00dcr\u00fcn Detay\u0131: {{ $route.params.id }}<\/h1>\n    <p v-if=\"$route.query.preview === &#039;true&#039;\">Bu bir \u00f6nizleme modudur.<\/p>\n    <p v-else>\u00dcr\u00fcn detay\u0131 i\u00e7eri\u011fi.<\/p>\n  <\/div>\n<\/template>\n\n<script>\nexport default {\n  middleware({ query, redirect }) {\n    \/\/ E\u011fer &#039;preview&#039; parametresi &#039;true&#039; de\u011filse, anasayfaya y\u00f6nlendir\n    if (query.preview !== &#039;true&#039;) {\n      return redirect(&#039;\/&#039;);\n    }\n  },\n  \/\/ ... di\u011fer sayfa se\u00e7enekleri\n}\n<\/script><\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, <code>middleware<\/code> \u00f6zelli\u011fi i\u00e7inde do\u011frudan bir fonksiyon tan\u0131mlanm\u0131\u015ft\u0131r. Bu fonksiyon, <code>context<\/code> objesini parametre olarak al\u0131r (ancak burada sadece <code>query<\/code> ve <code>redirect<\/code> destructuring yap\u0131lm\u0131\u015ft\u0131r) ve sayfan\u0131n y\u00fcklenmesinden \u00f6nce \u00e7al\u0131\u015f\u0131r. E\u011fer <code>query.preview<\/code> de\u011feri <code>true<\/code> de\u011filse, kullan\u0131c\u0131 anasayfaya y\u00f6nlendirilir.<\/p>\n<p><strong>Inline middleware'in avantajlar\u0131 \u015funlard\u0131r:<\/strong><\/p>\n<p>*   <strong>H\u0131zl\u0131 ve Pratik:<\/strong> K\u00fc\u00e7\u00fck, bile\u015fene \u00f6zg\u00fc mant\u0131klar i\u00e7in ayr\u0131 bir dosya olu\u015fturmaya gerek kalmaz.<br \/>\n*   <strong>Ba\u011flama \u00d6zg\u00fc:<\/strong> Mant\u0131k, ilgili bile\u015fenle daha s\u0131k\u0131 bir \u015fekilde ba\u011flant\u0131l\u0131d\u0131r, bu da okunabilirli\u011fi art\u0131rabilir.<\/p>\n<p><strong>Ancak dezavantajlar\u0131 da vard\u0131r:<\/strong><\/p>\n<p>*   <strong>Tekrar Kullan\u0131lamazl\u0131k:<\/strong> Bu \u015fekilde tan\u0131mlanan middleware'ler ba\u015fka bir yerde kolayca tekrar kullan\u0131lamaz. E\u011fer benzer mant\u0131\u011f\u0131 birden fazla yerde kullanman\u0131z gerekiyorsa, ayr\u0131 bir named middleware dosyas\u0131 olu\u015fturmak daha iyi olacakt\u0131r.<br \/>\n*   <strong>Kod Karma\u015f\u0131kl\u0131\u011f\u0131:<\/strong> \u00c7ok karma\u015f\u0131k mant\u0131klar inline olarak yaz\u0131ld\u0131\u011f\u0131nda, bile\u015fenin kodunu kalabal\u0131kla\u015ft\u0131rabilir ve okunabilirli\u011fi azaltabilir.<\/p>\n<div class=\"expert-tip\">Uzman \u0130pucu: Inline middleware'leri yaln\u0131zca ger\u00e7ekten \u00e7ok basit ve sadece o bile\u015fene \u00f6zg\u00fc olan senaryolarda kullan\u0131n. E\u011fer ayn\u0131 veya benzer mant\u0131\u011f\u0131 birden fazla yerde kullanma ihtimaliniz varsa, her zaman named middleware olu\u015fturmay\u0131 tercih edin. Bu yakla\u015f\u0131m, kod taban\u0131n\u0131z\u0131n daha d\u00fczenli ve s\u00fcrd\u00fcr\u00fclebilir olmas\u0131na yard\u0131mc\u0131 olacakt\u0131r. Karma\u015f\u0131k kimlik do\u011frulama veya yetkilendirme kontrolleri kesinlikle ayr\u0131 bir named veya global middleware olarak tan\u0131mlanmal\u0131d\u0131r.<\/div>\n<p>Genel olarak, Nuxt'\u0131n sundu\u011fu bu \u00fc\u00e7 middleware \u00e7e\u015fidi, geli\u015ftiricilere uygulama ak\u0131\u015f\u0131n\u0131 kontrol etmek i\u00e7in g\u00fc\u00e7l\u00fc ve esnek ara\u00e7lar sunar. Do\u011fru middleware t\u00fcr\u00fcn\u00fc do\u011fru yerde kullanarak, hem kod kalitenizi art\u0131rabilir hem de uygulaman\u0131z\u0131n performans\u0131n\u0131 ve g\u00fcvenli\u011fini optimize edebilirsiniz.<\/p>\n<h2>Kimlik Do\u011frulama ve Yetkilendirme Senaryolar\u0131nda Nuxt Middleware G\u00fcc\u00fc<\/h2>\n<p>Modern web uygulamalar\u0131n\u0131n belkemi\u011fini olu\u015fturan kimlik do\u011frulama (authentication) ve yetkilendirme (authorization) s\u00fcre\u00e7leri, kullan\u0131c\u0131lar\u0131n belirli kaynaklara veya sayfalara eri\u015fimini d\u00fczenlemek i\u00e7in hayati \u00f6neme sahiptir. Nuxt.js, bu karma\u015f\u0131k s\u00fcre\u00e7leri middleware'ler arac\u0131l\u0131\u011f\u0131yla son derece etkili ve y\u00f6netilebilir bir \u015fekilde ele alman\u0131z\u0131 sa\u011flar. Middleware'ler, kullan\u0131c\u0131lar\u0131n oturum durumunu kontrol etmek, eri\u015fim token'lar\u0131n\u0131 do\u011frulamak ve rol tabanl\u0131 yetkilendirme (RBAC) kurallar\u0131n\u0131 uygulamak i\u00e7in m\u00fckemmel bir katman sunar. Bu sayede, g\u00fcvenlik mant\u0131\u011f\u0131n\u0131 do\u011frudan sayfa bile\u015fenlerine kar\u0131\u015ft\u0131rmadan, merkezi ve tekrar kullan\u0131labilir bir yap\u0131da tutabilirsiniz.<\/p>\n<p>Bir kullan\u0131c\u0131n\u0131n oturum a\u00e7\u0131p a\u00e7mad\u0131\u011f\u0131n\u0131 kontrol etmek, genellikle kimlik do\u011frulama s\u00fcrecinin ilk ad\u0131m\u0131d\u0131r. \u00d6rne\u011fin, Nuxt Store'da tutulan bir <code>isAuthenticated<\/code> veya <code>loggedIn<\/code> durumunu kontrol eden bir middleware yazabilirsiniz. E\u011fer kullan\u0131c\u0131 oturum a\u00e7mam\u0131\u015fsa ve eri\u015fmeye \u00e7al\u0131\u015ft\u0131\u011f\u0131 sayfa herkese a\u00e7\u0131k de\u011filse, onu <code>login<\/code> sayfas\u0131na y\u00f6nlendirebilirsiniz. Bununla birlikte, kullan\u0131c\u0131 oturum a\u00e7t\u0131ktan sonra <code>login<\/code> veya <code>register<\/code> sayfalar\u0131na tekrar eri\u015fmesini engellemek de iyi bir kullan\u0131c\u0131 deneyimi prati\u011fidir.<\/p>\n<pre><code class=\"language-javascript\">\/\/ middleware\/auth.js (Geli\u015fmi\u015f Versiyon)\nexport default async function ({ store, redirect, route, app }) {\n  const publicRoutes = [&#039;login&#039;, &#039;register&#039;, &#039;index&#039;]; \/\/ Herkesin eri\u015febilece\u011fi rotalar\n  const authRequiredRoutes = [&#039;profile&#039;, &#039;dashboard&#039;, &#039;settings&#039;]; \/\/ Oturum gerektiren rotalar\n\n  \/\/ Kullan\u0131c\u0131n\u0131n oturum durumunu kontrol et\n  const isLoggedIn = store.getters[&#039;auth\/isLoggedIn&#039;]; \/\/ Auth mod\u00fcl\u00fcnden isLoggedIn getter&#039;\u0131 alal\u0131m\n\n  \/\/ E\u011fer oturum a\u00e7\u0131lmam\u0131\u015fsa\n  if (!isLoggedIn) {\n    if (!publicRoutes.includes(route.name)) {\n      \/\/ Oturum gerektiren bir sayfaya eri\u015fmeye \u00e7al\u0131\u015f\u0131yorsa\n      \/\/ Not: E\u011fer token varsa ama ge\u00e7erli de\u011filse, burada token yenileme mekanizmas\u0131 da \u00e7al\u0131\u015ft\u0131r\u0131labilir.\n      \/\/ \u00d6rnek: try { await store.dispatch(&#039;auth\/refreshToken&#039;) } catch { redirect(&#039;\/login&#039;) }\n      \n      console.log(&#039;Oturum a\u00e7\u0131lmam\u0131\u015f, giri\u015f sayfas\u0131na y\u00f6nlendiriliyor:&#039;, route.fullPath);\n      return redirect(&#039;\/login?redirect=&#039; + route.fullPath); \/\/ Kullan\u0131c\u0131y\u0131 giri\u015f sonras\u0131 orijinal sayfaya d\u00f6nd\u00fcrmek i\u00e7in\n    }\n  } else {\n    \/\/ E\u011fer oturum a\u00e7\u0131lm\u0131\u015fsa\n    if (publicRoutes.includes(route.name) && route.name !== &#039;index&#039;) {\n      \/\/ Giri\u015f yapm\u0131\u015f bir kullan\u0131c\u0131n\u0131n tekrar login\/register sayfalar\u0131na gitmesini engelle\n      console.log(&#039;Oturum a\u00e7\u0131k, anasayfaya y\u00f6nlendiriliyor:&#039;, route.fullPath);\n      return redirect(&#039;\/&#039;);\n    }\n\n    \/\/ Role tabanl\u0131 yetkilendirme \u00f6rne\u011fi\n    if (authRequiredRoutes.includes(route.name)) {\n      const userRole = store.getters[&#039;auth\/userRole&#039;]; \/\/ Kullan\u0131c\u0131n\u0131n rol\u00fcn\u00fc al\n      if (route.name === &#039;dashboard&#039; && userRole !== &#039;admin&#039;) {\n        \/\/ E\u011fer dashboard sayfas\u0131na eri\u015fmeye \u00e7al\u0131\u015f\u0131yorsa ve admin de\u011filse\n        console.log(&#039;Yetkisiz eri\u015fim: Dashboard i\u00e7in admin rol\u00fc gerekli.&#039;, userRole);\n        return redirect(&#039;\/unauthorized&#039;); \/\/ Yetkisiz eri\u015fim sayfas\u0131na y\u00f6nlendir\n      }\n      \/\/ Di\u011fer rol tabanl\u0131 kontroller eklenebilir.\n    }\n  }\n\n  \/\/ E\u011fer token bazl\u0131 bir sistem kullan\u0131l\u0131yorsa, token&#039;\u0131n s\u00fcresi dolmu\u015f olabilir.\n  \/\/ Bu durumda, bir yenileme mekanizmas\u0131 (refresh token) tetiklenmeli ve token yenilenemezse\n  \/\/ kullan\u0131c\u0131 \u00e7\u0131k\u0131\u015f yapmaya zorlanmal\u0131d\u0131r. Bu genellikle sunucu taraf\u0131nda veya\n  \/\/ API \u00e7a\u011fr\u0131lar\u0131n\u0131 yapan interceptor&#039;larda y\u00f6netilir, ancak middleware i\u00e7inde\n  \/\/ asenkron bir kontrol ile de desteklenebilir.\n}<\/pre>\n<p><\/code><\/p>\n<p>Bu geli\u015fmi\u015f <code>auth.js<\/code> middleware'i, Nuxt Store'daki kimlik do\u011frulama durumuna ba\u011fl\u0131 olarak kullan\u0131c\u0131lar\u0131 y\u00f6nlendirir. Ayr\u0131ca, kullan\u0131c\u0131n\u0131n rol\u00fcn\u00fc kontrol ederek belirli sayfalara eri\u015fimini k\u0131s\u0131tlar. <code>redirect(&#039;\/login?redirect=&#039; + route.fullPath)<\/code> kullan\u0131m\u0131, kullan\u0131c\u0131 giri\u015f yapt\u0131ktan sonra as\u0131l gitmek istedi\u011fi sayfaya geri d\u00f6nmesini sa\u011flayarak kullan\u0131c\u0131 deneyimini iyile\u015ftirir.<\/p>\n<div class=\"expert-tip\">Uzman \u0130pucu: Asenkron i\u015flemler i\u00e7eren middleware'lerde, \u00f6zellikle API \u00e7a\u011fr\u0131lar\u0131 yaparak kullan\u0131c\u0131 verilerini \u00e7ekiyor veya token'\u0131 yeniliyorsan\u0131z, Promise d\u00f6nd\u00fcren bir async fonksiyon kullanmay\u0131 unutmay\u0131n. Nuxt, Promise \u00e7\u00f6z\u00fclene kadar rota ge\u00e7i\u015fini bekleyecektir. Bu, uygulaman\u0131z\u0131n do\u011fru verilerle veya do\u011fru yetkilendirme durumuyla y\u00fcklenmesini garanti eder. \u00d6rne\u011fin, bir API \u00e7a\u011fr\u0131s\u0131yla kullan\u0131c\u0131n\u0131n g\u00fcncel rol\u00fcn\u00fc do\u011frulaman\u0131z gerekiyorsa <code>async<\/code> ve <code>await<\/code> anahtar kelimelerini kullanarak bu i\u015flemi middleware i\u00e7inde ger\u00e7ekle\u015ftirebilirsiniz.<\/div>\n<p>Rol tabanl\u0131 yetkilendirme (RBAC) uygulamak i\u00e7in, kullan\u0131c\u0131 rollerini (\u00f6rne\u011fin 'admin', 'editor', 'user') Nuxt Store'da saklayabilir ve middleware i\u00e7inde bu rollere g\u00f6re ko\u015fullu y\u00f6nlendirmeler yapabilirsiniz. \u00d6rne\u011fin, <code>pages\/admin\/<\/code> alt\u0131ndaki t\u00fcm sayfalara yaln\u0131zca 'admin' rol\u00fcne sahip kullan\u0131c\u0131lar\u0131n eri\u015fmesini sa\u011flamak i\u00e7in, <code>admin-only.js<\/code> gibi bir named middleware olu\u015fturup bu dizindeki layout'a veya sayfalara uygulayabilirsiniz.<\/p>\n<pre><code class=\"language-html\"><!-- layouts\/admin.vue -->\n<script>\nexport default {\n  middleware: &#039;admin-only&#039; \/\/ Bu layout&#039;u kullanan t\u00fcm sayfalar i\u00e7in\n}\n<\/script><\/pre>\n<p><\/code><\/p>\n<p>Bu yakla\u015f\u0131mlar, Nuxt uygulaman\u0131zda karma\u015f\u0131k g\u00fcvenlik kurallar\u0131n\u0131 temiz, mod\u00fcler ve y\u00f6netilebilir bir \u015fekilde uygulaman\u0131za olanak tan\u0131r. Merkezi bir yetkilendirme katman\u0131 sayesinde, hem geli\u015ftirme verimlili\u011fini art\u0131r\u0131r hem de uygulaman\u0131z\u0131n g\u00fcvenli\u011fini sa\u011flamla\u015ft\u0131r\u0131rs\u0131n\u0131z.<\/p>\n<h2>Middleware \u0130\u00e7inde Veri Y\u00f6netimi ve API \u00c7a\u011fr\u0131lar\u0131 Nas\u0131l Yap\u0131l\u0131r?<\/h2>\n<p>Nuxt middleware'ler, sadece basit y\u00f6nlendirme veya kimlik do\u011frulama kontrolleri yapmakla kalmaz, ayn\u0131 zamanda uygulaman\u0131z\u0131n state y\u00f6netimi (Nuxt Store) ile etkile\u015fime ge\u00e7ebilir, API \u00e7a\u011fr\u0131lar\u0131 yapabilir ve bu \u00e7a\u011fr\u0131lardan d\u00f6nen verilere g\u00f6re dinamik rota y\u00f6nlendirmeleri ger\u00e7ekle\u015ftirebilir. Bu yetenekler, middleware'leri olduk\u00e7a g\u00fc\u00e7l\u00fc ve esnek bir ara\u00e7 haline getirir. Middleware'in en \u00f6nemli parametresi olan <code>context<\/code> objesi, bu etkile\u015fimlerin anahtar\u0131d\u0131r.<\/p>\n<p><code>context<\/code> objesi, middleware'e mevcut istek hakk\u0131nda geni\u015f bir bilgi yelpazesi sunar. \u0130\u00e7erisinde genellikle \u015funlar\u0131 bulursunuz:<\/p>\n<p>*   <code>app<\/code>: Nuxt uygulamas\u0131n\u0131n Vue instance'\u0131n\u0131 ve <code>$axios<\/code> gibi eklentileri bar\u0131nd\u0131r\u0131r.<br \/>\n*   <code>store<\/code>: Nuxt Store'a eri\u015fim sa\u011flar, bu sayede state okuyabilir veya eylemler (actions) \u00e7a\u011f\u0131rabilirsiniz.<br \/>\n*   <code>redirect<\/code>: Bir URL'ye y\u00f6nlendirme yapmak i\u00e7in kullan\u0131l\u0131r.<br \/>\n*   <code>route<\/code>: Ge\u00e7erli rota objesini (path, params, query vb.) i\u00e7erir.<br \/>\n*   <code>params<\/code>, <code>query<\/code>: Rota parametrelerine ve sorgu dizelerine do\u011frudan eri\u015fim sa\u011flar.<br \/>\n*   <code>req<\/code>, <code>res<\/code>: Yaln\u0131zca sunucu taraf\u0131nda (SSR) mevcut olan Node.js request ve response objeleridir.<br \/>\n*   <code>error<\/code>: Hata sayfas\u0131n\u0131 tetiklemek i\u00e7in kullan\u0131l\u0131r.<\/p>\n<p><strong># Asenkron Middleware Kullan\u0131m\u0131 ve Promise Tabanl\u0131 Yakla\u015f\u0131mlar<\/strong><\/p>\n<p>Middleware i\u00e7inde harici bir servisten veri \u00e7ekmek veya bir API'ye istek g\u00f6ndermek gibi asenkron i\u015flemler yapman\u0131z gerekebilir. Nuxt, bu t\u00fcr durumlar i\u00e7in <code>async<\/code> anahtar kelimesiyle tan\u0131mlanm\u0131\u015f middleware fonksiyonlar\u0131n\u0131 destekler. Bir middleware <code>async<\/code> olarak tan\u0131mland\u0131\u011f\u0131nda, Nuxt Promise'in \u00e7\u00f6z\u00fclmesini bekler ve bu s\u00fcre zarf\u0131nda rota ge\u00e7i\u015fi engellenir. Bu, verilerin y\u00fcklenmeden veya do\u011frulanmadan \u00f6nce sayfan\u0131n render edilmesini \u00f6nlemek i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<p>\u00d6rne\u011fin, bir kullan\u0131c\u0131n\u0131n belirli bir \u00fcr\u00fcne eri\u015fim izni olup olmad\u0131\u011f\u0131n\u0131 bir API \u00e7a\u011fr\u0131s\u0131 ile kontrol eden bir middleware d\u00fc\u015f\u00fcnelim:<\/p>\n<pre><code class=\"language-javascript\">\/\/ middleware\/check-product-access.js\nexport default async function ({ app, store, route, redirect, error }) {\n  const productId = route.params.id; \/\/ Rota parametresinden \u00fcr\u00fcn ID&#039;sini al\n\n  \/\/ Kullan\u0131c\u0131n\u0131n oturum a\u00e7m\u0131\u015f olmas\u0131 gerekti\u011fini varsayal\u0131m\n  if (!store.getters[&#039;auth\/isLoggedIn&#039;]) {\n    return redirect(&#039;\/login?redirect=&#039; + route.fullPath);\n  }\n\n  try {\n    \/\/ API \u00e7a\u011fr\u0131s\u0131 ile kullan\u0131c\u0131n\u0131n bu \u00fcr\u00fcne eri\u015fim iznini kontrol et\n    \/\/ app.$axios Nuxt&#039;ta y\u00fckl\u00fc olan Axios instance&#039;\u0131 temsil eder.\n    const response = await app.$axios.$get(<code>\/api\/products\/${productId}\/access<\/code>, {\n      headers: {\n        Authorization: <code>Bearer ${store.state.auth.accessToken}<\/code> \/\/ Kullan\u0131c\u0131n\u0131n token&#039;\u0131n\u0131 g\u00f6nder\n      }\n    });\n\n    if (!response.hasAccess) {\n      \/\/ E\u011fer eri\u015fim izni yoksa, yetkisiz eri\u015fim sayfas\u0131na y\u00f6nlendir\n      return error({ statusCode: 403, message: &#039;Bu \u00fcr\u00fcne eri\u015fim izniniz yok.&#039; });\n    }\n    \/\/ E\u011fer eri\u015fim izni varsa, middleware sona erer ve rota y\u00fcklenmeye devam eder.\n\n  } catch (err) {\n    \/\/ API \u00e7a\u011fr\u0131s\u0131nda bir hata olu\u015fursa (\u00f6rne\u011fin 404, 500)\n    console.error(&#039;\u00dcr\u00fcn eri\u015fim kontrol\u00fc hatas\u0131:&#039;, err);\n    \/\/ Hata durumunda kullan\u0131c\u0131y\u0131 anasayfaya veya bir hata sayfas\u0131na y\u00f6nlendir\n    return error({ statusCode: err.response ? err.response.status : 500, message: &#039;\u00dcr\u00fcn eri\u015fimi kontrol edilirken bir hata olu\u015ftu.&#039; });\n  }\n}<\/pre>\n<p><\/code><\/p>\n<p>Bu <code>check-product-access.js<\/code> middleware'i, asenkron bir API \u00e7a\u011fr\u0131s\u0131 yaparak dinamik bir kontrol sa\u011flar. E\u011fer kullan\u0131c\u0131 oturum a\u00e7mam\u0131\u015fsa veya API'den d\u00f6nen yan\u0131ta g\u00f6re eri\u015fim izni yoksa, uygun bir \u015fekilde y\u00f6nlendirme veya hata g\u00f6sterimi yapar. Bu, karma\u015f\u0131k i\u015f mant\u0131\u011f\u0131n\u0131 merkezi bir yerde y\u00f6netmenin ve kullan\u0131c\u0131ya \u00f6zel i\u00e7erik sunman\u0131n g\u00fc\u00e7l\u00fc bir yoludur.<\/p>\n<p><strong># <code>fetch<\/code> veya <code>asyncData<\/code> ile Middleware Aras\u0131ndaki Farklar ve Entegrasyon<\/strong><\/p>\n<p>Middleware, <code>fetch<\/code> ve <code>asyncData<\/code> fonksiyonlar\u0131 Nuxt'ta server-side rendering (SSR) ve \u00f6nceden veri \u00e7ekme i\u00e7in kullan\u0131lan g\u00fc\u00e7l\u00fc ara\u00e7lard\u0131r, ancak farkl\u0131 ama\u00e7lara hizmet ederler ve farkl\u0131 zamanlarda \u00e7al\u0131\u015f\u0131rlar:<\/p>\n<p>*   <strong>Middleware:<\/strong> Rota ge\u00e7i\u015finden \u00f6nce \u00e7al\u0131\u015f\u0131r. Temel amac\u0131, bir rota y\u00fcklenmeden \u00f6nce y\u00f6nlendirme, kimlik do\u011frulama, yetkilendirme gibi kararlar almak ve bu kararlara g\u00f6re rota ge\u00e7i\u015fini kontrol etmektir. Veri \u00e7ekebilir, ancak genellikle sayfan\u0131n kendisinin render edilmesi i\u00e7in gerekli olan veriyi de\u011fil, y\u00f6nlendirme karar\u0131 i\u00e7in gerekli olan veriyi \u00e7eker.<br \/>\n*   <strong><code>asyncData<\/code>:<\/strong> Sayfa bile\u015fenini olu\u015fturmadan \u00f6nce \u00e7al\u0131\u015f\u0131r ve sunucu taraf\u0131nda (veya istemci taraf\u0131nda ilk y\u00fcklemede) \u00e7al\u0131\u015f\u0131r. Amac\u0131, sayfa bile\u015feninin ba\u015flang\u0131\u00e7 verilerini \u00e7ekmek ve bile\u015fenin <code>data<\/code> \u00f6zelli\u011fini doldurmakt\u0131r. <code>asyncData<\/code> i\u00e7inde y\u00f6nlendirme yap\u0131labilir ancak ana odak noktas\u0131 veri \u00e7ekmektir.<br \/>\n*   <strong><code>fetch<\/code>:<\/strong> Nuxt 2.12 ve sonraki s\u00fcr\u00fcmlerde sunulan <code>fetch<\/code> hook'u, herhangi bir Vue bile\u015feninde (sayfalar, layout'lar, bile\u015fenler) veri \u00e7ekmek i\u00e7in kullan\u0131l\u0131r. Hem sunucu taraf\u0131nda hem de istemci taraf\u0131nda (gezinti s\u0131ras\u0131nda) \u00e7al\u0131\u015fabilir. <code>asyncData<\/code>'dan farkl\u0131 olarak, do\u011frudan bile\u015fenin <code>data<\/code>'s\u0131n\u0131 g\u00fcncellemek yerine <code>this.$data<\/code>'ya eri\u015fim sa\u011flar. <code>fetch<\/code> i\u00e7inde de y\u00f6nlendirme yap\u0131labilir.<\/p>\n<p><strong>Entegrasyon:<\/strong> Middleware'ler, <code>fetch<\/code> veya <code>asyncData<\/code> ile birlikte \u00e7al\u0131\u015farak g\u00fc\u00e7l\u00fc senaryolar olu\u015fturabilir. \u00d6rne\u011fin, bir middleware kullan\u0131c\u0131n\u0131n oturum durumunu kontrol edip gerekirse giri\u015f sayfas\u0131na y\u00f6nlendirirken, e\u011fer kullan\u0131c\u0131 yetkiliyse ve rota ge\u00e7i\u015fi devam ederse, sayfan\u0131n <code>asyncData<\/code> veya <code>fetch<\/code> fonksiyonlar\u0131 devreye girerek o sayfa i\u00e7in gerekli verileri \u00e7ekebilir. Bu s\u0131ralama, uygulaman\u0131z\u0131n hem g\u00fcvenli\u011fini hem de performans\u0131n\u0131 optimize etmenize olanak tan\u0131r. \u00d6nce middleware ile eri\u015fim kontrol\u00fc yap\u0131l\u0131r, sonra <code>fetch<\/code> veya <code>asyncData<\/code> ile i\u00e7erik y\u00fcklenir.<\/p>\n<div class=\"expert-tip\">Uzman \u0130pucu: Middleware i\u00e7inde yap\u0131lan API \u00e7a\u011fr\u0131lar\u0131, <code>asyncData<\/code> veya <code>fetch<\/code> i\u00e7inde yap\u0131lan \u00e7a\u011fr\u0131lardan \u00f6nce tamamlan\u0131r. Bu nedenle, y\u00f6nlendirme kararlar\u0131n\u0131z\u0131 etkileyecek hayati bilgiler i\u00e7in middleware'i, sayfan\u0131n i\u00e7eri\u011fini dolduracak veriler i\u00e7in ise <code>asyncData<\/code> veya <code>fetch<\/code>'i kullanmaya \u00f6zen g\u00f6sterin. Gereksiz yere middleware i\u00e7inde b\u00fcy\u00fck veri k\u00fcmeleri \u00e7ekmekten ka\u00e7\u0131n\u0131n, \u00e7\u00fcnk\u00fc bu, her rota ge\u00e7i\u015finde ekstra y\u00fck olu\u015fturarak performans\u0131 d\u00fc\u015f\u00fcrebilir.<\/div>\n<p>Bu derinlemesine veri y\u00f6netimi ve asenkron i\u015flemler yetene\u011fi, Nuxt middleware'i modern, veri odakl\u0131 ve g\u00fcvenli uygulamalar geli\u015ftirmek i\u00e7in vazge\u00e7ilmez bir ara\u00e7 haline getirir.<\/p>\n<h2>Nuxt Middleware'de Hata Y\u00f6netimi ve Performans \u0130pu\u00e7lar\u0131<\/h2>\n<p>Nuxt middleware'ler uygulaman\u0131z\u0131n ak\u0131\u015f\u0131n\u0131 kontrol eden g\u00fc\u00e7l\u00fc ara\u00e7lar olsa da, do\u011fru hata y\u00f6netimi ve performans optimizasyonu stratejileri olmadan beklenmedik sorunlara veya yava\u015flamalara yol a\u00e7abilirler. Bu b\u00f6l\u00fcmde, middleware'lerinizde olas\u0131 hatalar\u0131 nas\u0131l etkili bir \u015fekilde y\u00f6netece\u011finizi ve uygulaman\u0131z\u0131n genel performans\u0131n\u0131 nas\u0131l art\u0131rabilece\u011finizi inceleyece\u011fiz.<\/p>\n<h3>Middleware Hatalar\u0131n\u0131 Yakalama ve Kullan\u0131c\u0131ya Dost Mesajlar Sunma<\/h3>\n<p>Middleware i\u00e7inde, \u00f6zellikle asenkron i\u015flemler veya harici API \u00e7a\u011fr\u0131lar\u0131 yaparken hatalarla kar\u015f\u0131la\u015fmak ka\u00e7\u0131n\u0131lmazd\u0131r. Bu hatalar\u0131 yakalamak ve kullan\u0131c\u0131ya anlaml\u0131 geri bildirimler sunmak, uygulaman\u0131z\u0131n dayan\u0131kl\u0131l\u0131\u011f\u0131 ve kullan\u0131c\u0131 deneyimi a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir. Nuxt middleware'de hatalar\u0131 y\u00f6netmek i\u00e7in <code>error<\/code> metodunu kullanabiliriz. Bu metod, Nuxt'\u0131n dahili hata sayfas\u0131n\u0131 (veya \u00f6zelle\u015ftirilmi\u015f hata sayfan\u0131z\u0131) tetikler.<\/p>\n<pre><code class=\"language-javascript\">\/\/ middleware\/check-config.js\nexport default async function ({ app, error, store }) {\n  try {\n    \/\/ \u00d6rne\u011fin, sunucudan kritik bir yap\u0131land\u0131rma verisini \u00e7ekiyoruz\n    const config = await app.$axios.$get(&#039;\/api\/app-config&#039;);\n\n    if (!config.isFeatureEnabled) {\n      \/\/ E\u011fer kritik bir \u00f6zellik devre d\u0131\u015f\u0131 ise, kullan\u0131c\u0131y\u0131 uyar\n      return error({ statusCode: 503, message: &#039;Uygulama ge\u00e7ici olarak hizmet d\u0131\u015f\u0131d\u0131r.&#039; });\n    }\n    store.commit(&#039;setConfig&#039;, config); \/\/ Yap\u0131land\u0131rmay\u0131 store&#039;a kaydet\n\n  } catch (e) {\n    \/\/ API \u00e7a\u011fr\u0131s\u0131 s\u0131ras\u0131nda bir hata olu\u015fursa\n    console.error(&#039;Uygulama yap\u0131land\u0131rmas\u0131 y\u00fcklenirken hata:&#039;, e);\n    \/\/ Kullan\u0131c\u0131ya genel bir hata mesaj\u0131 g\u00f6ster\n    return error({ statusCode: 500, message: &#039;Uygulama yap\u0131land\u0131rmas\u0131 y\u00fcklenemedi. L\u00fctfen daha sonra tekrar deneyin.&#039; });\n  }\n}<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, <code>try...catch<\/code> blo\u011fu ile asenkron bir API \u00e7a\u011fr\u0131s\u0131 s\u0131ras\u0131nda olu\u015fabilecek hatalar yakalan\u0131r. Herhangi bir hata durumunda, <code>error()<\/code> metodu \u00e7a\u011f\u0131r\u0131larak Nuxt'\u0131n hata sayfas\u0131na y\u00f6nlendirme yap\u0131l\u0131r. Bu, kullan\u0131c\u0131n\u0131n bo\u015f bir sayfa veya geli\u015ftirici konsolunda bir hata g\u00f6rmesini engeller. Ayr\u0131ca, hata mesajlar\u0131n\u0131 ve durum kodlar\u0131n\u0131 \u00f6zelle\u015ftirebilirsiniz, bu da hata ay\u0131klama s\u00fcrecini kolayla\u015ft\u0131r\u0131r.<\/p>\n<h3>Performans Etkileri: Ne Zaman ve Ne Kadar Middleware Kullan\u0131lmal\u0131?<\/h3>\n<p>Middleware'ler g\u00fc\u00e7l\u00fc olsa da, yanl\u0131\u015f kullan\u0131m\u0131 uygulaman\u0131z\u0131n performans\u0131n\u0131 olumsuz etkileyebilir. Her rota ge\u00e7i\u015finde \u00e7al\u0131\u015fan bir middleware, uygulaman\u0131n y\u00fcklenme s\u00fcresine ek s\u00fcre ekler. Bu nedenle, middleware kullan\u0131m\u0131nda dikkatli olmak \u00f6nemlidir:<\/p>\n<p>1.  <strong>Gereksiz \u0130\u015flemden Ka\u00e7\u0131n\u0131n:<\/strong> Yaln\u0131zca gerekli olan mant\u0131\u011f\u0131 middleware i\u00e7ine koyun. Performans a\u00e7\u0131s\u0131ndan yo\u011fun i\u015flemler (\u00f6rne\u011fin, b\u00fcy\u00fck veri setlerini i\u015flemek), sayfa y\u00fcklemesi i\u00e7in kritik de\u011filse, daha sonra <code>mounted<\/code> kancas\u0131nda veya bir kullan\u0131c\u0131 eylemiyle tetiklenen API \u00e7a\u011fr\u0131lar\u0131nda yap\u0131lmal\u0131d\u0131r.<br \/>\n2.  <strong>Global Middleware'i Ak\u0131ll\u0131ca Kullan\u0131n:<\/strong> T\u00fcm rotalar i\u00e7in ge\u00e7erli olmayan kontrolleri global middleware'e eklemekten ka\u00e7\u0131n\u0131n. Belirli sayfalara \u00f6zg\u00fc mant\u0131klar i\u00e7in rota (named) middleware'leri tercih edin.<br \/>\n3.  <strong>Asenkron Middleware'leri Optimize Edin:<\/strong> Asenkron middleware'ler, Promise \u00e7\u00f6z\u00fclene kadar rota ge\u00e7i\u015fini duraklatt\u0131\u011f\u0131 i\u00e7in performans\u0131 do\u011frudan etkiler. Bu t\u00fcr middleware'lerde yap\u0131lan API \u00e7a\u011fr\u0131lar\u0131n\u0131n h\u0131zl\u0131 oldu\u011fundan emin olun ve gereksiz gecikmeleri \u00f6nlemek i\u00e7in \u00f6nbellekleme (caching) stratejilerini de\u011ferlendirin.<br \/>\n4.  <strong>Hafif \u0130\u015flemler \u00d6ncelikli:<\/strong> M\u00fcmk\u00fcn oldu\u011funca hafif ve h\u0131zl\u0131 \u00e7al\u0131\u015fan middleware'ler yaz\u0131n. \u00d6rne\u011fin, sadece bir cookie de\u011ferini kontrol etmek gibi basit i\u015flemler, asenkron bir API \u00e7a\u011fr\u0131s\u0131ndan \u00e7ok daha h\u0131zl\u0131d\u0131r.<\/p>\n<div class=\"expert-tip\">Uzman \u0130pucu: Middleware'ler i\u00e7inde a\u011f\u0131r hesaplamalar veya \u00e7ok say\u0131da API \u00e7a\u011fr\u0131s\u0131 yapmaktan ka\u00e7\u0131n\u0131n. E\u011fer bir middleware i\u00e7inde birden fazla ba\u011f\u0131ms\u0131z asenkron i\u015flem yapman\u0131z gerekiyorsa, bunlar\u0131 <code>Promise.all()<\/code> ile paralel \u00e7al\u0131\u015ft\u0131rmay\u0131 d\u00fc\u015f\u00fcnebilirsiniz. Bu, toplam bekleme s\u00fcresini azaltarak performans\u0131 art\u0131rabilir. Ancak, bu i\u015flemlerin ger\u00e7ekten rota ge\u00e7i\u015fi i\u00e7in kritik oldu\u011fundan emin olun.<\/div>\n<h3>\u00d6nbellekleme Stratejileri ve Middleware<\/h3>\n<p>Performans\u0131 art\u0131rmak i\u00e7in middleware i\u00e7inde \u00f6nbellekleme mekanizmalar\u0131 kullanmak faydal\u0131 olabilir. \u00d6rne\u011fin, s\u0131k\u00e7a \u00e7ekilen ancak nadiren de\u011fi\u015fen bir yap\u0131land\u0131rma verisini middleware i\u00e7inde bir kez \u00e7ekip Nuxt Store'da veya istemci taraf\u0131 depolamada (localStorage\/sessionStorage) \u00f6nbelle\u011fe alabilirsiniz. B\u00f6ylece, her rota ge\u00e7i\u015finde ayn\u0131 API \u00e7a\u011fr\u0131s\u0131n\u0131 yapmaktan ka\u00e7\u0131narak sunucu y\u00fck\u00fcn\u00fc ve yan\u0131t s\u00fcresini azalt\u0131rs\u0131n\u0131z.<\/p>\n<pre><code class=\"language-javascript\">\/\/ middleware\/load-initial-data.js\nexport default async function ({ store, app }) {\n  if (!store.state.settings.loaded) { \/\/ E\u011fer ayarlar hen\u00fcz y\u00fcklenmemi\u015fse\n    try {\n      const settings = await app.$axios.$get(&#039;\/api\/settings&#039;);\n      store.commit(&#039;settings\/setSettings&#039;, settings);\n      store.commit(&#039;settings\/setLoaded&#039;, true);\n    } catch (e) {\n      console.error(&#039;Ayarlar y\u00fcklenemedi:&#039;, e);\n      \/\/ Hata y\u00f6netimi\n    }\n  }\n}<\/pre>\n<p><\/code><\/p>\n<p>Bu middleware, yaln\u0131zca uygulama ayarlar\u0131 hen\u00fcz y\u00fcklenmemi\u015fse bir API \u00e7a\u011fr\u0131s\u0131 yapar. Bu t\u00fcr bir \u00f6nbellekleme, \u00f6zellikle global middleware'lerde performans\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir.<\/p>\n<h3>Mobil Uyumlu Tasar\u0131mda Middleware'in Dolayl\u0131 Etkileri<\/h3>\n<p>Middleware, do\u011frudan g\u00f6rsel tasar\u0131m \u00f6\u011feleriyle ilgili olmasa da, kullan\u0131c\u0131 deneyimi ve dolay\u0131s\u0131yla mobil uyumluluk \u00fczerinde dolayl\u0131 etkileri olabilir. \u00d6rne\u011fin:<\/p>\n<p>*   <strong>H\u0131zl\u0131 Y\u00fckleme:<\/strong> Middleware'ler sayesinde yetkisiz kullan\u0131c\u0131lara hemen giri\u015f sayfas\u0131 g\u00f6sterilirken, yetkili kullan\u0131c\u0131lara do\u011frudan ilgili i\u00e7erik sunulabilir. Bu, gereksiz i\u00e7erik y\u00fcklemeyi engelleyerek mobil cihazlarda daha h\u0131zl\u0131 sayfa y\u00fckleme s\u00fcreleri sa\u011flar.<br \/>\n*   <strong>Dinamik \u0130\u00e7erik Render:<\/strong> Middleware ile kullan\u0131c\u0131 rol\u00fcne veya cihaz tipine (user agent kontrol\u00fc ile) g\u00f6re farkl\u0131 layout'lar veya bile\u015fenler y\u00fcklenmesi karar\u0131 al\u0131nabilir. Bu, mobil cihazlar i\u00e7in optimize edilmi\u015f, hafif bir deneyim sunman\u0131za yard\u0131mc\u0131 olabilir.<\/p>\n<p>Mobil uyumlu bir aray\u00fcz i\u00e7in genellikle CSS Media Query'leri kullan\u0131l\u0131r. Middleware'in burada do\u011frudan bir rol\u00fc olmasa da, middleware'in ald\u0131\u011f\u0131 kararlar sonucunda y\u00fcklenen i\u00e7erik veya layout'un, mobil uyumlu CSS ile do\u011fru \u015fekilde stilize edildi\u011finden emin olmak \u00f6nemlidir.<\/p>\n<pre><code class=\"language-html\"><style>\n\/* Varsay\u0131lan stil *\/\n.container {\n  padding: 1rem;\n  font-size: 16px;\n}\n\n\/* Mobil cihazlar i\u00e7in medya sorgusu *\/\n@media (max-width: 768px) {\n  .container {\n    padding: 0.5rem;\n    font-size: 14px;\n  }\n  .sidebar {\n    display: none; \/* Mobilde kenar \u00e7ubu\u011funu gizle *\/\n  }\n  .main-content {\n    width: 100%; \/* Mobilde ana i\u00e7eri\u011fi tam geni\u015flik yap *\/\n  }\n}\n<\/style><\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki basit CSS \u00f6rne\u011fi, middleware'in getirdi\u011fi verimli rota y\u00f6netiminden sonra, i\u00e7eri\u011fin mobil cihazlarda nas\u0131l daha iyi g\u00f6r\u00fcnebilece\u011fini g\u00f6stermektedir. \u00d6zetle, Nuxt middleware'i, uygulaman\u0131z\u0131n g\u00fcvenli\u011fini ve verimlili\u011fini art\u0131ran kritik bir ara\u00e7t\u0131r. Do\u011fru hata y\u00f6netimi ve performans ipu\u00e7lar\u0131yla birle\u015fti\u011finde, hem geli\u015ftirici hem de son kullan\u0131c\u0131 i\u00e7in sorunsuz bir deneyim sunar.<\/p>\n<h2>Sonu\u00e7: Nuxt Uygulamalar\u0131n\u0131zda Middleware ile Kontrol\u00fc Ele Al\u0131n<\/h2>\n<p>Bu makalede, Nuxt.js uygulamalar\u0131nda middleware'in ne oldu\u011funu, neden bu kadar \u00f6nemli oldu\u011funu ve farkl\u0131 t\u00fcrlerini nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 detayl\u0131 bir \u015fekilde inceledik. Middleware'ler, Nuxt'\u0131n rota ge\u00e7i\u015f ya\u015fam d\u00f6ng\u00fcs\u00fcne m\u00fcdahale ederek, kimlik do\u011frulama, yetkilendirme, dil tespiti veya veri do\u011frulama gibi kritik i\u015f mant\u0131klar\u0131n\u0131 merkezi ve mod\u00fcler bir yap\u0131da uygulaman\u0131za olanak tan\u0131r. Global, rota tabanl\u0131 (named) ve inline middleware t\u00fcrleri sayesinde, uygulaman\u0131z\u0131n her seviyesinde gran\u00fcler kontrol sa\u011flayabilir, kod tekrar\u0131n\u0131 azaltabilir ve projenizin s\u00fcrd\u00fcr\u00fclebilirli\u011fini art\u0131rabilirsiniz.<\/p>\n<p>Ger\u00e7ek d\u00fcnya senaryolar\u0131nda, Nuxt middleware'lerinin kullan\u0131c\u0131 deneyimini ve uygulama g\u00fcvenli\u011fini nas\u0131l geli\u015ftirdi\u011fini g\u00f6rd\u00fck. Oturum a\u00e7mam\u0131\u015f kullan\u0131c\u0131lar\u0131 belirli sayfalardan uzak tutmak, y\u00f6neticilere \u00f6zel panellere eri\u015fim vermek veya belirli ko\u015fullar alt\u0131nda dinamik olarak y\u00f6nlendirmeler yapmak gibi i\u015flemler, middleware sayesinde \u00e7ok daha kolay ve hatas\u0131z bir \u015fekilde ger\u00e7ekle\u015ftirilebilir. Ayr\u0131ca, middleware i\u00e7inde asenkron API \u00e7a\u011fr\u0131lar\u0131 yaparak dinamik kararlar alman\u0131n ve bu s\u00fcre\u00e7lerde etkin hata y\u00f6netiminin nas\u0131l yap\u0131laca\u011f\u0131n\u0131 da ele ald\u0131k. Son olarak, performans ipu\u00e7lar\u0131 ve \u00f6nbellekleme stratejileri ile middleware kullan\u0131m\u0131n\u0131n uygulaman\u0131z\u0131n h\u0131z\u0131na olumsuz etki etmemesi i\u00e7in neler yap\u0131lmas\u0131 gerekti\u011fini vurgulad\u0131k. Unutmay\u0131n, do\u011fru yerde ve do\u011fru \u015fekilde kullan\u0131lan middleware'ler, Nuxt uygulaman\u0131z\u0131 daha g\u00fc\u00e7l\u00fc, g\u00fcvenli ve performansl\u0131 hale getirmenin anahtar\u0131d\u0131r.<\/p>\n<p>Nuxt 3 ile birlikte, middleware konsepti biraz daha evrilmi\u015f ve Vite ile birlikte \u00e7al\u0131\u015facak \u015fekilde optimize edilmi\u015ftir. Ancak temel prensipler ve sundu\u011fu avantajlar ayn\u0131 kalm\u0131\u015ft\u0131r. Bu makalede edindi\u011finiz bilgiler, Nuxt'\u0131n hangi s\u00fcr\u00fcm\u00fcn\u00fc kullan\u0131rsan\u0131z kullan\u0131n, uygulama geli\u015ftirme s\u00fcrecinizde size sa\u011flam bir temel sunacakt\u0131r.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p><strong>1. Nuxt middleware nerede tan\u0131mlanmal\u0131d\u0131r?<\/strong><\/p>\n<p>Nuxt middleware'ler, projenizin k\u00f6k dizininde bulunan <code>middleware\/<\/code> klas\u00f6r\u00fc i\u00e7inde JavaScript dosyalar\u0131 olarak tan\u0131mlan\u0131r. \u00d6rne\u011fin, <code>middleware\/auth.js<\/code>. Bu dosyalar varsay\u0131lan olarak bir fonksiyon d\u0131\u015fa aktarmal\u0131d\u0131r.<\/p>\n<p><strong>2. Middleware i\u00e7indeki <code>redirect<\/code> metodu nas\u0131l kullan\u0131l\u0131r?<\/strong><\/p>\n<p><code>redirect<\/code> metodu, middleware'in <code>context<\/code> objesi i\u00e7inde yer al\u0131r ve kullan\u0131c\u0131y\u0131 farkl\u0131 bir URL'ye y\u00f6nlendirmek i\u00e7in kullan\u0131l\u0131r. \u00d6rne\u011fin, <code>return redirect('\/login');<\/code> \u015feklinde \u00e7a\u011fr\u0131larak kullan\u0131c\u0131n\u0131n mevcut rotadan ba\u015fka bir rotaya ge\u00e7i\u015fini sa\u011flar. <code>return<\/code> ifadesini kullanmak, middleware'in y\u00fcr\u00fct\u00fclmesini durdurur ve y\u00f6nlendirmeyi hemen tetikler.<\/p>\n<p><strong>3. Nuxt 3'te Middleware kullan\u0131m\u0131nda de\u011fi\u015fiklikler var m\u0131?<\/strong><\/p>\n<p>Evet, Nuxt 3'te middleware kullan\u0131m\u0131 baz\u0131 evrimler ge\u00e7irmi\u015ftir. <code>middleware\/<\/code> dizini hala ge\u00e7erlidir, ancak art\u0131k <code>defineNuxtRouteMiddleware<\/code> yard\u0131mc\u0131 fonksiyonu kullan\u0131l\u0131r ve middleware'ler varsay\u0131lan olarak asenkrondur. Ayr\u0131ca, <code>addRouteMiddleware<\/code> gibi programatik ekleme se\u00e7enekleri de sunulmu\u015ftur. Ancak temel mant\u0131k (rota ge\u00e7i\u015fi \u00f6ncesi kontrol) ayn\u0131 kalm\u0131\u015ft\u0131r.<\/p>\n<p><strong>4. Birden fazla middleware ayn\u0131 anda nas\u0131l \u00e7al\u0131\u015f\u0131r?<\/strong><\/p>\n<p>Bir sayfaya veya layout'a birden fazla named middleware atayabilir veya <code>nuxt.config.js<\/code> dosyas\u0131nda birden fazla global middleware tan\u0131mlayabilirsiniz. Nuxt, middleware'leri tan\u0131mland\u0131klar\u0131 s\u0131raya g\u00f6re \u00e7al\u0131\u015ft\u0131r\u0131r. \u00d6rne\u011fin, <code>middleware: ['auth', 'logger']<\/code> \u015feklinde tan\u0131mland\u0131\u011f\u0131nda \u00f6nce <code>auth<\/code>, sonra <code>logger<\/code> middleware'i \u00e7al\u0131\u015facakt\u0131r. Bir middleware i\u00e7inde <code>redirect<\/code> veya <code>error<\/code> \u00e7a\u011fr\u0131l\u0131rsa, sonraki middleware'ler \u00e7al\u0131\u015ft\u0131r\u0131lmaz ve rota ge\u00e7i\u015fi durdurulur.<\/p>\n","protected":false},"excerpt":{"rendered":"Nuxt Uygulamalar\u0131n\u0131zda Middleware G\u00fcc\u00fc: Rotay\u0131 Y\u00f6netmek Nuxt.js uygulamalar\u0131nda rota ge\u00e7i\u015flerini nas\u0131l ele alaca\u011f\u0131n\u0131z\u0131, kullan\u0131c\u0131 yetkilendirmeyi ve oturum y\u00f6netimini&hellip;","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-34632","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>Nuxt Middleware Nedir ve Neden Hayat Kurtar\u0131r?<\/title>\n<meta name=\"description\" content=\"Sadece y\u00f6neticiler bu sayfay\u0131 g\u00f6rebilir.\" \/>\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\/nuxt-middleware-nedir-ve-neden-hayat-kurtarir\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Nuxt Middleware Nedir ve Neden Hayat Kurtar\u0131r?\" \/>\n<meta property=\"og:description\" content=\"Sadece y\u00f6neticiler bu sayfay\u0131 g\u00f6rebilir.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/nuxt-middleware-nedir-ve-neden-hayat-kurtarir\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-19T22:01:05+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=\"26 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/nuxt-middleware-nedir-ve-neden-hayat-kurtarir\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/nuxt-middleware-nedir-ve-neden-hayat-kurtarir\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Nuxt Middleware Nedir ve Neden Hayat Kurtar\u0131r?\",\"datePublished\":\"2025-11-19T22:01:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/nuxt-middleware-nedir-ve-neden-hayat-kurtarir\/\"},\"wordCount\":4333,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/nuxt-middleware-nedir-ve-neden-hayat-kurtarir\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/nuxt-middleware-nedir-ve-neden-hayat-kurtarir\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/nuxt-middleware-nedir-ve-neden-hayat-kurtarir\/\",\"name\":\"Nuxt Middleware Nedir ve Neden Hayat Kurtar\u0131r?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-19T22:01:05+00:00\",\"description\":\"Sadece y\u00f6neticiler bu sayfay\u0131 g\u00f6rebilir.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/nuxt-middleware-nedir-ve-neden-hayat-kurtarir\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/nuxt-middleware-nedir-ve-neden-hayat-kurtarir\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/nuxt-middleware-nedir-ve-neden-hayat-kurtarir\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Nuxt Middleware Nedir ve Neden Hayat Kurtar\u0131r?\"}]},{\"@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":"Nuxt Middleware Nedir ve Neden Hayat Kurtar\u0131r?","description":"Sadece y\u00f6neticiler bu sayfay\u0131 g\u00f6rebilir.","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\/nuxt-middleware-nedir-ve-neden-hayat-kurtarir\/","og_locale":"tr_TR","og_type":"article","og_title":"Nuxt Middleware Nedir ve Neden Hayat Kurtar\u0131r?","og_description":"Sadece y\u00f6neticiler bu sayfay\u0131 g\u00f6rebilir.","og_url":"https:\/\/fatihsoysal.com\/blog\/nuxt-middleware-nedir-ve-neden-hayat-kurtarir\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-19T22:01:05+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"26 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/nuxt-middleware-nedir-ve-neden-hayat-kurtarir\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/nuxt-middleware-nedir-ve-neden-hayat-kurtarir\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Nuxt Middleware Nedir ve Neden Hayat Kurtar\u0131r?","datePublished":"2025-11-19T22:01:05+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/nuxt-middleware-nedir-ve-neden-hayat-kurtarir\/"},"wordCount":4333,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/nuxt-middleware-nedir-ve-neden-hayat-kurtarir\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/nuxt-middleware-nedir-ve-neden-hayat-kurtarir\/","url":"https:\/\/fatihsoysal.com\/blog\/nuxt-middleware-nedir-ve-neden-hayat-kurtarir\/","name":"Nuxt Middleware Nedir ve Neden Hayat Kurtar\u0131r?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-19T22:01:05+00:00","description":"Sadece y\u00f6neticiler bu sayfay\u0131 g\u00f6rebilir.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/nuxt-middleware-nedir-ve-neden-hayat-kurtarir\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/nuxt-middleware-nedir-ve-neden-hayat-kurtarir\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/nuxt-middleware-nedir-ve-neden-hayat-kurtarir\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Nuxt Middleware Nedir ve Neden Hayat Kurtar\u0131r?"}]},{"@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\/34632","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=34632"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34632\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=34632"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=34632"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=34632"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}