[{"data":1,"prerenderedAt":263},["ShallowReactive",2],{"term-m\u002Fmiddleware":3,"related-m\u002Fmiddleware":244},{"id":4,"title":5,"acronym":6,"body":7,"category":224,"description":225,"difficulty":226,"extension":227,"letter":228,"meta":229,"navigation":230,"path":231,"related":232,"seo":238,"sitemap":239,"stem":242,"subcategory":6,"__hash__":243},"terms\u002Fterms\u002Fm\u002Fmiddleware.md","Middleware",null,{"type":8,"value":9,"toc":218},"minimark",[10,15,19,23,26,30,207,211,214],[11,12,14],"h2",{"id":13},"eli5-the-vibe-check","ELI5 — The Vibe Check",[16,17,18],"p",{},"Middleware is like a security checkpoint at an airport. Before your request reaches its destination (the controller), it passes through multiple checkpoints — one checks your auth token, one logs the request, one validates the data. Each checkpoint can stop you or wave you through.",[11,20,22],{"id":21},"real-talk","Real Talk",[16,24,25],{},"Middleware is a function that sits between the request and the final route handler. It has access to the request and response objects and can execute code, modify them, end the cycle, or call the next middleware in the stack.",[11,27,29],{"id":28},"show-me-the-code","Show Me The Code",[31,32,37],"pre",{"className":33,"code":34,"language":35,"meta":36,"style":36},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F Auth middleware\nconst requireAuth = (req, res, next) => {\n  if (!req.headers.authorization) {\n    return res.status(401).json({ error: 'Unauthorized' });\n  }\n  next(); \u002F\u002F pass to next middleware\n};\n","javascript","",[38,39,40,49,91,123,180,186,201],"code",{"__ignoreMap":36},[41,42,45],"span",{"class":43,"line":44},"line",1,[41,46,48],{"class":47},"sHwdD","\u002F\u002F Auth middleware\n",[41,50,52,56,60,64,67,71,74,77,79,82,85,88],{"class":43,"line":51},2,[41,53,55],{"class":54},"spNyl","const",[41,57,59],{"class":58},"sTEyZ"," requireAuth ",[41,61,63],{"class":62},"sMK4o","=",[41,65,66],{"class":62}," (",[41,68,70],{"class":69},"sHdIc","req",[41,72,73],{"class":62},",",[41,75,76],{"class":69}," res",[41,78,73],{"class":62},[41,80,81],{"class":69}," next",[41,83,84],{"class":62},")",[41,86,87],{"class":54}," =>",[41,89,90],{"class":62}," {\n",[41,92,94,98,101,104,106,109,112,114,117,120],{"class":43,"line":93},3,[41,95,97],{"class":96},"s7zQu","  if",[41,99,66],{"class":100},"swJcz",[41,102,103],{"class":62},"!",[41,105,70],{"class":58},[41,107,108],{"class":62},".",[41,110,111],{"class":58},"headers",[41,113,108],{"class":62},[41,115,116],{"class":58},"authorization",[41,118,119],{"class":100},") ",[41,121,122],{"class":62},"{\n",[41,124,126,129,131,133,137,140,144,146,148,151,153,156,159,162,165,169,172,175,177],{"class":43,"line":125},4,[41,127,128],{"class":96},"    return",[41,130,76],{"class":58},[41,132,108],{"class":62},[41,134,136],{"class":135},"s2Zo4","status",[41,138,139],{"class":100},"(",[41,141,143],{"class":142},"sbssI","401",[41,145,84],{"class":100},[41,147,108],{"class":62},[41,149,150],{"class":135},"json",[41,152,139],{"class":100},[41,154,155],{"class":62},"{",[41,157,158],{"class":100}," error",[41,160,161],{"class":62},":",[41,163,164],{"class":62}," '",[41,166,168],{"class":167},"sfazB","Unauthorized",[41,170,171],{"class":62},"'",[41,173,174],{"class":62}," }",[41,176,84],{"class":100},[41,178,179],{"class":62},";\n",[41,181,183],{"class":43,"line":182},5,[41,184,185],{"class":62},"  }\n",[41,187,189,192,195,198],{"class":43,"line":188},6,[41,190,191],{"class":135},"  next",[41,193,194],{"class":100},"()",[41,196,197],{"class":62},";",[41,199,200],{"class":47}," \u002F\u002F pass to next middleware\n",[41,202,204],{"class":43,"line":203},7,[41,205,206],{"class":62},"};\n",[11,208,210],{"id":209},"when-youll-hear-this","When You'll Hear This",[16,212,213],{},"\"Add auth middleware to protect that route.\" \u002F \"The logging middleware runs on every request.\"",[215,216,217],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":36,"searchDepth":51,"depth":51,"links":219},[220,221,222,223],{"id":13,"depth":51,"text":14},{"id":21,"depth":51,"text":22},{"id":28,"depth":51,"text":29},{"id":209,"depth":51,"text":210},"backend","Middleware is like a security checkpoint at an airport.","intermediate","md","m",{},true,"\u002Fterms\u002Fm\u002Fmiddleware",[233,234,235,236,237],"Route","Router","Authentication","Controller","Express",{"title":5,"description":225},{"changefreq":240,"priority":241},"weekly",0.7,"terms\u002Fm\u002Fmiddleware","Fwu9ukvyus-_EYzRSq2ZYuLwKpXfo_Pp4RxxHS6GuvU",[245,251,254,257,260],{"title":235,"path":246,"acronym":247,"category":248,"difficulty":249,"description":250},"\u002Fterms\u002Fa\u002Fauthentication","AuthN","security","beginner","Authentication is proving you are who you say you are.",{"title":236,"path":252,"acronym":6,"category":224,"difficulty":226,"description":253},"\u002Fterms\u002Fc\u002Fcontroller","A controller is the manager who actually handles your request after it passes through security.",{"title":237,"path":255,"acronym":6,"category":224,"difficulty":249,"description":256},"\u002Fterms\u002Fe\u002Fexpress","Express is the most popular framework for building Node.js backends.",{"title":233,"path":258,"acronym":6,"category":224,"difficulty":249,"description":259},"\u002Fterms\u002Fr\u002Froute","A route is like a road sign that tells incoming requests where to go.",{"title":234,"path":261,"acronym":6,"category":224,"difficulty":249,"description":262},"\u002Fterms\u002Fr\u002Frouter","The router is the traffic cop of your backend.",1776518295225]