﻿
{"id":8839,"date":"2018-07-31T08:53:10","date_gmt":"2018-07-31T08:53:10","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=8839"},"modified":"2018-07-31T08:53:10","modified_gmt":"2018-07-31T08:53:10","slug":"express-js-middlewareara-katman-nedir-nasil-kullanilir","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/express-js-middlewareara-katman-nedir-nasil-kullanilir\/","title":{"rendered":"Express.js &#8211; Middleware(Ara Katman) Nedir? Nas\u0131l Kullan\u0131l\u0131r?"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Yaz\u0131l\u0131m dendimi ak\u0131llara kompleks ve anlams\u0131z i\u015flemlerden anlaml\u0131 sonu\u00e7lar \u00fcreten bir olgu gelmektedir. Bu kompleks s\u00fcre\u00e7ler, son kullan\u0131c\u0131lara m\u00fcmk\u00fcn mertebe yans\u0131t\u0131lmadan program\u0131n hizmet edece\u011fi i\u015f ne ise o alana d\u00f6n\u00fck olabildi\u011fince t\u00fcm i\u015flemler aray\u00fcz odakl\u0131 halledilebilir hale getirilmektedir. Tabi s\u00fcreci sadece son kullan\u0131c\u0131 odakl\u0131 d\u00fc\u015f\u00fcn\u00fcrsek ilgili yaz\u0131l\u0131mda nihai eri\u015fimi aray\u00fczsel seviyede y\u00f6netilebilir hale getirmek yeterli olacakt\u0131r. Lakin bu i\u015fin bir de yaz\u0131l\u0131m geli\u015ftiricileri boyutu mevcuttur. Yani kompleks s\u00fcrecin tam merkezinde yani i\u015fin kod ve veri k\u0131sm\u0131nda bulunan yaz\u0131l\u0131m ekibi bu s\u00fcreci kendi lehlerinde anlamland\u0131rabilirlerse, hem geli\u015ftiriciler i\u00e7in hem de yaz\u0131l\u0131m\u0131n gelece\u011fe dair geli\u015fimindeki e\u011filimi i\u00e7in olduk\u00e7a faydal\u0131 katk\u0131da bulunulmu\u015f olacakt\u0131r.<\/p>\n<p>Asl\u0131nda bu anlamland\u0131rma u\u011fra\u015f\u0131s\u0131, yaz\u0131l\u0131m\u0131n sa\u011flam temellerde in\u015fa edilmesini sa\u011flayaca\u011f\u0131ndan dolay\u0131 do\u011fru, prensipli ve anla\u015f\u0131labilir kod in\u015faas\u0131n\u0131 gerektirecek ve bir yandan da yaz\u0131l\u0131mc\u0131lar i\u00e7in projeye hiyerar\u015fik boyut kazand\u0131racak neyin, nerede ve ne ama\u00e7la oldu\u011funa dair daha geni\u015f perspektifle ilgili projeye bak\u0131\u015f a\u00e7\u0131lar\u0131n\u0131 geni\u015fletecek ve verimi artt\u0131racakt\u0131r. Yani yaz\u0131l\u0131m geli\u015ftiriciler ustaysa e\u011fer in\u015faatta \u00e7ekicin \u00e7ivinin nerede nas\u0131l tutuldu\u011funu bilmeleri i\u015flerinde h\u0131zlanmalar\u0131n\u0131 sa\u011flayacakt\u0131r.<\/p>\n<p>Teknik boyutta bir projeyi daha anlaml\u0131 hale getirmek i\u00e7in \u00f6ncelikle do\u011fru yakla\u015f\u0131mlarla ilgili proje tasarlanmal\u0131d\u0131r. Buda do\u011fru ve detayl\u0131 plan gerektirmektedir. Tasar\u0131ya d\u00f6n\u00fck olmas\u0131 gerekti\u011fi yerlerde ise bir \u00c7inli ile bir ba\u015fka Aborjin yaz\u0131l\u0131m geli\u015ftiricinin birbirlerinin be\u015feri dillerini bilmeden, birinin yapt\u0131\u011f\u0131 i\u015fi bir di\u011ferinin tek bak\u0131\u015fta ve tek seferde anlayabilmesini sa\u011flayacak olan design pattern(tasar\u0131m desenleri) yap\u0131lar\u0131 uygulanmal\u0131d\u0131r. T\u00fcm bunlar\u0131n yan\u0131nda proje m\u00fcmk\u00fcn mertebe katmansal hale getirilmeli ve tekrardan d\u00fcnya standartlar\u0131nda bir katmanl\u0131 mimarinin e\u015fli\u011finde proje temellendirilip ihtiyaca d\u00f6n\u00fck \u00f6zel katmanlarla geni\u015fletilmelidir.<\/p>\n<p>Bu i\u00e7eri\u011fimizde bizler bir projenin katmansal hale getirilmesini Node.js&#8217;in Express.js mod\u00fcl\u00fcnde k\u00fc\u00e7\u00fck bir noktada de\u011ferlendirecek ve gelen requestlere kar\u015f\u0131l\u0131k response g\u00f6nderilmeden araya Middleware \u015feklinde isimlendirilen ara katman sokaca\u011f\u0131z. \u015eimdi gelin Middleware&#8217;in ne i\u015fe yarad\u0131\u011f\u0131n\u0131 ve nas\u0131l kullan\u0131ld\u0131\u011f\u0131n\u0131 inceleyelim.<\/p>\n<h3>Middleware(Ara Katman) Nedir?<\/h3>\n<p>Klasik web uygulamalar\u0131nda, kullan\u0131c\u0131dan gelen taleplere(request) kar\u015f\u0131l\u0131k cevaplar(response) g\u00f6nderilmektedir.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/07\/Express.js-MiddlewareAra-Katman-Nedir-Nas\u0131l-Kullan\u0131l\u0131r..png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/07\/Express.js-MiddlewareAra-Katman-Nedir-Nas\u0131l-Kullan\u0131l\u0131r..png\" alt=\"Express.js - Middleware(Ara Katman) Nedir? Nas\u0131l Kullan\u0131l\u0131r?\" width=\"332\" height=\"43\" class=\"aligncenter size-full wp-image-8855\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/07\/Express.js-MiddlewareAra-Katman-Nedir-Nas\u0131l-Kullan\u0131l\u0131r..png 332w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/07\/Express.js-MiddlewareAra-Katman-Nedir-Nas\u0131l-Kullan\u0131l\u0131r.-300x39.png 300w\" sizes=\"auto, (max-width: 332px) 100vw, 332px\" \/><\/a><br \/>\nGeli\u015fmi\u015f yap\u0131lanmada ise, request &#8211; response i\u015flevsel ili\u015fkisinin aras\u0131na Middleware girebilmekte ve tek elden ek i\u015flemler icra edilebilmektedir.<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/07\/Express.js-MiddlewareAra-Katman-Nedir-Nas\u0131l-Kullan\u0131l\u0131r.-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/07\/Express.js-MiddlewareAra-Katman-Nedir-Nas\u0131l-Kullan\u0131l\u0131r.-1.png\" alt=\"Express.js - Middleware(Ara Katman) Nedir? Nas\u0131l Kullan\u0131l\u0131r?\" width=\"588\" height=\"46\" class=\"aligncenter size-full wp-image-8856\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/07\/Express.js-MiddlewareAra-Katman-Nedir-Nas\u0131l-Kullan\u0131l\u0131r.-1.png 588w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/07\/Express.js-MiddlewareAra-Katman-Nedir-Nas\u0131l-Kullan\u0131l\u0131r.-1-300x23.png 300w\" sizes=\"auto, (max-width: 588px) 100vw, 588px\" \/><\/a><br \/>\nMiddleware katman\u0131, genellikle t\u00fcm route rotalar\u0131nda yap\u0131lacak i\u015flemleri tek elden y\u00f6netmek i\u00e7in kullan\u0131lmaktad\u0131r. Genellikle bu i\u015flemlerden biri kullan\u0131c\u0131 oturum kontrol\u00fcd\u00fcr. Her bir route \u00fczerinde bu kontrol\u00fc yapman\u0131n ne kadar maliyetli ve l\u00fczumsuz kod israf\u0131na yol a\u00e7aca\u011f\u0131n\u0131 siz d\u00fc\u015f\u00fcn\u00fcn&#8230;<\/p>\n<p>\u015eimdi Middleware ile ilgili teknik boyutta de\u011ferlendirmelere ba\u015flayal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nconst express = require(&quot;express&quot;);\r\nconst app = express();\r\n\r\napp.use((request, response, next) =&gt; {\r\n    response.send(&quot;Middleware \u00e7al\u0131\u015ft\u0131.&quot;);\r\n});\r\n\r\napp.get(&quot;\/&quot;, (request, response) =&gt; {\r\n    response.send(&quot;Route \u00e7al\u0131\u015ft\u0131...&quot;);\r\n}).listen(5000);\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funu incelerseniz e\u011fer &#8220;app.use&#8221; fonksiyonu i\u00e7erisine tan\u0131mlanan callback fonksiyonu ile Middleware&#8217;i olu\u015fturmu\u015f oluyoruz. Bu i\u015flemden sonra &#8220;app&#8221; \u00fczerinden olu\u015fturulan t\u00fcm route yap\u0131lar\u0131 i\u00e7in herhangi bir istek s\u00f6z konusu olursa bu istek kar\u015f\u0131l\u0131\u011f\u0131nda cevap verilmeden \u00f6nce ilgili middleware devreye girecektir.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/07\/Express.js-MiddlewareAra-Katman-Nedir-Nas\u0131l-Kullan\u0131l\u0131r.-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/07\/Express.js-MiddlewareAra-Katman-Nedir-Nas\u0131l-Kullan\u0131l\u0131r.-2.png\" alt=\"Express.js - Middleware(Ara Katman) Nedir? Nas\u0131l Kullan\u0131l\u0131r?\" width=\"203\" height=\"56\" class=\"aligncenter size-full wp-image-8862\" \/><\/a><br \/>\n&#8220;<strong>Tamam, istek neticesinde ilgili middleware devreye girdi girmesine ama sanki tetiklenen route \u00e7al\u0131\u015ft\u0131r\u0131lmad\u0131 la hoca!<\/strong>&#8221; diye s\u00f6yleniyor olabilirsiniz&#8230; Evet, hakl\u0131s\u0131n\u0131z. Ama bu sorunuzun cevab\u0131na gelmeden \u00f6nce middleware fonksiyonumuzdaki parametrelerden en sonuncusu olan &#8220;next&#8221; fonksiyonunu inceleyelim.<\/p>\n<p>&#8220;next&#8221; parametresi yukar\u0131da bahsetti\u011fim gibi bir fonksiyondur. Bu fonksiyon \u00e7a\u011fr\u0131ld\u0131\u011f\u0131 zaman ilgili middleware&#8217;de ki \u00e7al\u0131\u015fmalar\u0131n onayland\u0131\u011f\u0131 bir ba\u015fka deyi\u015fle do\u011fruland\u0131\u011f\u0131 s\u00f6z konusu olacakt\u0131r ve middleware tetiklenmeden \u00f6nce hangi route&#8217;a istek g\u00f6nderildiyse o route bu do\u011frulama neticesinde \u00e7al\u0131\u015ft\u0131r\u0131lacakt\u0131r.<\/p>\n<p>Bu mant\u0131kla yukar\u0131daki \u00e7al\u0131\u015fmaya g\u00f6z atarsak e\u011fer &#8220;next&#8221; fonksiyonu \u00e7a\u011fr\u0131lmad\u0131\u011f\u0131 i\u00e7in ilgili tetiklenen route \u00e7al\u0131\u015ft\u0131r\u0131lmam\u0131\u015ft\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nconst express = require(&quot;express&quot;);\r\nconst app = express();\r\n\r\napp.use((request, response, next) =&gt; {\r\n    next();\r\n});\r\n\r\napp.get(&quot;\/&quot;, (request, response) =&gt; {\r\n    response.send(&quot;Route \u00e7al\u0131\u015ft\u0131...&quot;);\r\n}).listen(5000);\r\n<\/pre>\n<p>Bu \u015fekilde &#8220;next&#8221; fonksiyonunu tetiklersek direkt olarak route tetiklenecektir.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/07\/Express.js-MiddlewareAra-Katman-Nedir-Nas\u0131l-Kullan\u0131l\u0131r.-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/07\/Express.js-MiddlewareAra-Katman-Nedir-Nas\u0131l-Kullan\u0131l\u0131r.-3.png\" alt=\"Express.js - Middleware(Ara Katman) Nedir? Nas\u0131l Kullan\u0131l\u0131r?\" width=\"209\" height=\"65\" class=\"aligncenter size-full wp-image-8868\" \/><\/a><\/p>\n<p>\u015eimdi \u00f6rne\u011fimizi daha da derinle\u015ftirerek konumuzu detayland\u0131rmak i\u00e7in bir kullan\u0131c\u0131 oturum kontrol\u00fc sa\u011flayal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nconst express = require(&quot;express&quot;);\r\nconst app = express();\r\n\r\napp.use((request, response, next) =&gt; {\r\n    let isLogin = false;\r\n    if (isLogin)\r\n        next();\r\n    else\r\n        response.send(`${request.url} middleware \u00e7al\u0131\u015ft\u0131.&lt;br&gt; Kullan\u0131c\u0131 giri\u015fi yap\u0131lmad\u0131.`);\r\n});\r\n\r\napp.get(&quot;\/&quot;, (request, response) =&gt; {\r\n    response.send(&quot;Anasayfa&quot;);\r\n}).get(&quot;\/profil&quot;, (request, response) =&gt; {\r\n    response.send(&quot;Profil sayfas\u0131.&quot;);\r\n}).get(&quot;\/ayarlar&quot;, (request, response) =&gt; {\r\n    response.send(&quot;Ayarlar sayfas\u0131.&quot;);\r\n}).listen(5000, () =&gt; console.log(&quot;Yay\u0131n ba\u015flad\u0131...&quot;));\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funu incelerseniz e\u011fer &#8220;\/&#8221;, &#8220;\/profil&#8221; ve &#8220;\/ayarlar&#8221; adreslerine olmak \u00fczere \u00fc\u00e7 adet route olu\u015fturulmu\u015ftur. Bu routelara yap\u0131lan isteklerde middleware devreye girecek ve kullan\u0131c\u0131 oturum kontrol\u00fc yapacakt\u0131r. E\u011fer oturumu a\u00e7\u0131ksa ilgili sayfalara y\u00f6nlendirecektir.<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/07\/Express.js-MiddlewareAra-Katman-Nedir-Nas\u0131l-Kullan\u0131l\u0131r..gif\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/07\/Express.js-MiddlewareAra-Katman-Nedir-Nas\u0131l-Kullan\u0131l\u0131r..gif\" alt=\"Express.js - Middleware(Ara Katman) Nedir? Nas\u0131l Kullan\u0131l\u0131r?\" width=\"248\" height=\"86\" class=\"aligncenter size-full wp-image-8871\" \/><\/a><\/p>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi biz manuel olarak oturumu false de\u011ferinde tuttu\u011fumuz i\u00e7in hi\u00e7bir route&#8217;a eri\u015fim ger\u00e7ekle\u015ftirilememektedir.<\/p>\n<p>E\u011fer ki bir middleware katman\u0131n\u0131n sade ve sadece istedi\u011finiz bir route rotas\u0131nda uygulanmas\u0131n\u0131 istiyorsan\u0131z a\u015fa\u011f\u0131daki gibi \u00e7al\u0131\u015fma ger\u00e7ekle\u015ftirebilirsiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n.\r\n.\r\n.\r\napp.use(&quot;\/profil&quot;, (request, response, next) =&gt; {\r\n    let isLogin = false;\r\n    if (isLogin)\r\n        next();\r\n    else\r\n        response.send(`${request.url} middleware \u00e7al\u0131\u015ft\u0131.&lt;br&gt; Kullan\u0131c\u0131 giri\u015fi yap\u0131lmad\u0131.`);\r\n});\r\n.\r\n.\r\n.\r\n<\/pre>\n<p>&#8220;use&#8221; fonksiyonunun ilk parametresine hangi routeta middleware&#8217;\u0131n \u00e7al\u0131\u015f\u0131lmas\u0131n\u0131 istiyorsan\u0131z belirtmeniz yeterlidir.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/07\/Express.js-MiddlewareAra-Katman-Nedir-Nas\u0131l-Kullan\u0131l\u0131r.-1.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/07\/Express.js-MiddlewareAra-Katman-Nedir-Nas\u0131l-Kullan\u0131l\u0131r.-1.gif\" alt=\"Express.js - Middleware(Ara Katman) Nedir? Nas\u0131l Kullan\u0131l\u0131r?\" width=\"248\" height=\"86\" class=\"aligncenter size-full wp-image-8873\" \/><\/a><\/p>\n<h3>Ayr\u0131 Bir Mod\u00fcl Olarak Middleware<\/h3>\n<p>Middleware katman\u0131n\u0131 farkl\u0131 bir mod\u00fcl olarak tasarlayarak ihtiyaca d\u00f6n\u00fck gereken noktalarda require edebilir ve kullanabiliriz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n\/\/-isLogin.js\r\nconst isLogin = (request, response, next) =&gt; {\r\n    let isLogin = false;\r\n    if (isLogin)\r\n        next();\r\n    else\r\n        response.send(`${request.url} middleware \u00e7al\u0131\u015ft\u0131.&lt;br&gt; Kullan\u0131c\u0131 giri\u015fi yap\u0131lmad\u0131.`);\r\n};\r\nmodule.exports = isLogin;\r\n<\/pre>\n<p>Yukar\u0131da g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere mod\u00fcl olarak tasarlanan middleware katman\u0131n\u0131 a\u015fa\u011f\u0131daki gibi require ederek kullanabiliriz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n.\r\n.\r\n.\r\nconst isLogin = require(&quot;.\/isLogin&quot;);\r\n\r\napp.use(isLogin);\r\n.\r\n.\r\n.\r\n<\/pre>\n<p>Export edilen mod\u00fcl\u00fc require ile elde ettikten sonra &#8220;app.use&#8221; fonksiyonuna direkt olarak vermemiz yeterlidir.<\/p>\n<p>Mod\u00fcl bazl\u0131 \u00e7al\u0131\u015f\u0131rken istenilen route rotas\u0131nda middleware katman\u0131n\u0131 kullanmak isterseniz e\u011fer a\u015fa\u011f\u0131daki gibi \u00e7al\u0131\u015fabilirsiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nconst express = require(&quot;express&quot;);\r\nconst app = express();\r\nconst isLogin = require(&quot;.\/isLogin&quot;);\r\n\r\n\r\napp.get(&quot;\/&quot;, isLogin, (request, response) =&gt; {\r\n    response.send(&quot;Anasayfa&quot;);\r\n}).get(&quot;\/profil&quot;, (request, response) =&gt; {\r\n    response.send(&quot;Profil sayfas\u0131.&quot;);\r\n}).get(&quot;\/ayarlar&quot;, isLogin, (request, response) =&gt; {\r\n    response.send(&quot;Ayarlar sayfas\u0131.&quot;);\r\n}).listen(5000, () =&gt; console.log(&quot;Yay\u0131n ba\u015flad\u0131...&quot;));\r\n<\/pre>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere direkt olarak route fonksiyonlar\u0131nda ikinci parametre olarak ilgili middleware mod\u00fcl\u00fcn\u00fc vermemiz yeterlidir.<\/p>\n<p>E\u011fer ki middleware mod\u00fclleri birden fazla ise a\u015fa\u011f\u0131daki gibi bir yakla\u015f\u0131m sergileyebilirsiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n.\r\n.\r\n.\r\nconst app = express();\r\nconst isLogin = require(&quot;.\/isLogin&quot;);\r\nconst control = require(&quot;.\/control&quot;);\r\n\r\napp.get(&quot;\/&quot;, isLogin, control, (request, response) =&gt; {\r\n    response.send(&quot;Anasayfa&quot;);\r\n})\r\n.\r\n.\r\n.\r\n<\/pre>\n<p>Dikkat ederseniz e\u011fer route rotas\u0131nda ilk parametreden sonra istenildi\u011fi kadar middleware atanabilmektedir. Buradaki \u00f6ncelik s\u0131ralamas\u0131 atama s\u0131ralamas\u0131yla birebir uyumludur. Yani ilk olarak &#8220;isLogin&#8221; middleware katman\u0131 kontrol edilecek. E\u011fer &#8220;next&#8221; metodu tetiklenirse ard\u0131ndan &#8220;control&#8221; middleware katman\u0131 denetlenecektir. Ve bu i\u015flem atanan n adet katman i\u00e7in bu \u015fekilde devam edecektir.<\/p>\n<p>Bir yaz\u0131m\u0131z\u0131n daha sonuna gelmi\u015f bulunmaktay\u0131z. Umar\u0131m bol bol faydalan\u0131rs\u0131n\u0131z.<\/p>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar dilerim&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Yaz\u0131l\u0131m dendimi ak\u0131llara kompleks ve anlams\u0131z i\u015flemlerden anlaml\u0131 sonu\u00e7lar \u00fcreten bir olgu gelmektedir. Bu kompleks s\u00fcre\u00e7ler, son kullan\u0131c\u0131lara m\u00fcmk\u00fcn mertebe yans\u0131t\u0131lmadan program\u0131n hizmet edece\u011fi i\u015f ne ise o alana d\u00f6n\u00fck olabildi\u011fince t\u00fcm i\u015flemler&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":8686,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2495,2145],"tags":[2525,2527,2524,2523,2526,2522],"class_list":["post-8839","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-express-js","category-node-js","tag-ara-katman","tag-express-js-ara-katman","tag-express-js-middleware","tag-middleware","tag-node-js-ara-katman","tag-node-js-middleware"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/8839","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=8839"}],"version-history":[{"count":37,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/8839\/revisions"}],"predecessor-version":[{"id":8882,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/8839\/revisions\/8882"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/8686"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=8839"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=8839"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=8839"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}