{"id":1239,"date":"2025-05-14T13:30:28","date_gmt":"2025-05-14T13:30:28","guid":{"rendered":"https:\/\/www.wordpress-prod.sharpener.tech\/?p=1239"},"modified":"2025-05-14T13:30:29","modified_gmt":"2025-05-14T13:30:29","slug":"router-script","status":"publish","type":"post","link":"https:\/\/www.sharpener.tech\/blog\/router-script\/","title":{"rendered":"Jimmy\u2019s Busy Cafe \u2013 A Perfect Parallel to Router in Express.js"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/www.wordpress-prod.sharpener.tech\/wp-content\/uploads\/2025\/05\/Router-Script-1024x683.jpg\" alt=\"\" class=\"wp-image-1242\" srcset=\"https:\/\/sharpener-wordpress.s3.ap-south-1.amazonaws.com\/blog\/wp-content\/uploads\/2025\/05\/14133018\/Router-Script-1024x683.jpg 1024w, https:\/\/sharpener-wordpress.s3.ap-south-1.amazonaws.com\/blog\/wp-content\/uploads\/2025\/05\/14133018\/Router-Script-300x200.jpg 300w, https:\/\/sharpener-wordpress.s3.ap-south-1.amazonaws.com\/blog\/wp-content\/uploads\/2025\/05\/14133018\/Router-Script-768x512.jpg 768w, https:\/\/sharpener-wordpress.s3.ap-south-1.amazonaws.com\/blog\/wp-content\/uploads\/2025\/05\/14133018\/Router-Script.jpg 1536w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Hello everyone! My name is Julian, and today we\u2019re going to discuss routers.<br>But before diving into the details, let me share a recent experience which i had.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">My cousin Jimmy always dreamed of owning a caf\u00e9 in his hometown.<br>Every summer, he takes two months off to run his bustling caf\u00e9, where customers come in, place their orders, and wait to be served.<br>As the owner, he is responsible for ensuring that orders are taken, food is prepared, and customers are served in an organized and efficient manner.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>The Chaos Without Organization:<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>When customers walk in, he take their orders, takes them to the kitchen, and then try to serve them.<br>However, when there are too many customers, he gets overwhelmed.<br>Orders get mixed up, and he has trouble remembering which order belongs to whom.<\/li>\n\n\n\n<li>Sometimes, he forgets to check on other tasks, leading to delays and unhappy customers.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>The Solution &#8211; Introducing a System of Servers:<\/strong><strong><br><\/strong><strong>So to solve this issue<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>He decided to hire several servers to handle different tasks:\n<ul class=\"wp-block-list\">\n<li><strong>Server 1:<\/strong> Takes the order.<\/li>\n\n\n\n<li><strong>Server 2:<\/strong> Sends the order to the kitchen.<\/li>\n\n\n\n<li><strong>Server 3:<\/strong> Serves the food to customers.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Now, instead of doing everything yourself, each server has a specific role.<br>Jimmy, as the manager, oversees the process, ensuring everything runs smoothly.<br>Each server can do their job without stepping on each other&#8217;s toes, and the overall system is much more organized.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Relating This to Express.js Router<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In web development, the <strong>Express Router<\/strong> works similarly to the system of servers in the caf\u00e9:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Router<\/strong> in Express is like a group of servers that handle different types of tasks:\n<ul class=\"wp-block-list\">\n<li><strong>Routing:<\/strong> The router manages different routes (URLs) and organizes how requests are handled, so each route can be handled separately.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Just as having multiple servers in the caf\u00e9 makes things more efficient and organized,<br>using <strong>Express Router<\/strong> helps organize and simplify the handling of routes in your application.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>How the Router Makes It Better<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Without a router, your Express app could become messy and difficult to manage, especially as the number of routes increases.<br>Let\u2019s see how this works in practice.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Code Example Without Router:<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">const express = require(&#8216;express&#8217;);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">const app = express();<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ Handling everything in one file<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">app.get(&#8216;\/orders&#8217;, (req, res) =&gt; {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;res.send(&#8216;Order List&#8217;);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">});<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">app.post(&#8216;\/orders&#8217;, (req, res) =&gt; {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;res.send(&#8216;Order Created&#8217;);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">});<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">app.get(&#8216;\/users&#8217;, (req, res) =&gt; {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;res.send(&#8216;User List&#8217;);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">});<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">app.post(&#8216;\/users&#8217;, (req, res) =&gt; {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;res.send(&#8216;User Created&#8217;);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">});<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">app.listen(3000, () =&gt; {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;console.log(&#8216;Server is running on port 3000&#8217;);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">});<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Issues:<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Everything is in one file, making it hard to scale as the project becomes complex.<\/li>\n\n\n\n<li>As the app grows, you have to keep adding more routes, making the code messy and harder to maintain.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>How the Router Makes It Better<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">By splitting routes into separate files and using Express Router, we can create a more organized and scalable structure for our application. Let\u2019s implement this approach:<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>1. Main Application File (<\/strong><strong>app.js<\/strong><strong>)<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">This file serves as the entry point and integrates the routers for different sections of the app:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">const express = require(&#8216;express&#8217;);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">const app = express();<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ Import routes<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">const ordersRouter = require(&#8216;.\/routes\/orders&#8217;);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">const usersRouter = require(&#8216;.\/routes\/users&#8217;);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ Use routers<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">app.use(&#8216;\/orders&#8217;, ordersRouter);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">app.use(&#8216;\/users&#8217;, usersRouter);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ Start the server<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">app.listen(3000, () =&gt; {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;console.log(&#8216;Server is running on port 3000&#8217;);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">});<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>2. Orders Routes (<\/strong><strong>routes\/orders.js<\/strong><strong>)<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">This file handles all routes related to orders.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">const express = require(&#8216;express&#8217;);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">const router = express.Router();<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ Get all orders<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">router.get(&#8216;\/&#8217;, (req, res) =&gt; {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;res.send(&#8216;Order List&#8217;);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">});<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ Create a new order<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">router.post(&#8216;\/&#8217;, (req, res) =&gt; {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;res.send(&#8216;Order Created&#8217;);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">});<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">module.exports = router;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>Additional:&nbsp;<\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>&nbsp;Will also talk about other types of request that one can work with such as&nbsp;<\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>\/\/ Update an existing order<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>router.put(&#8216;\/:orderId&#8217;, (req, res) =&gt; {<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp;&nbsp;&nbsp;const { orderId } = req.params;<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp;&nbsp;&nbsp;res.send(`Order ${orderId} Updated`);<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>});<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>\/\/ Delete an order<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>router.delete(&#8216;\/:orderId&#8217;, (req, res) =&gt; {<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp;&nbsp;&nbsp;const { orderId } = req.params;<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp;&nbsp;&nbsp;res.send(`Order ${orderId} Deleted`);<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>});<\/em><em><\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>3. Users Routes (<\/strong><strong>routes\/users.js<\/strong><strong>)<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">This file handles all routes related to users.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">const express = require(&#8216;express&#8217;);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">const router = express.Router();<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ Get all users<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">router.get(&#8216;\/&#8217;, (req, res) =&gt; {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;res.send(&#8216;User List&#8217;);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">});<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ Create a new user<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">router.post(&#8216;\/&#8217;, (req, res) =&gt; {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;res.send(&#8216;User Created&#8217;);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">});<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">module.exports = router;<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Advantages of Using Separate Routes<\/strong><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Organization<\/strong>: Routes are grouped logically (e.g., orders, users) in separate files, keeping the codebase clean and structured.<\/li>\n\n\n\n<li><strong>Maintainability<\/strong>: Makes it easier to add, modify, or remove routes without touching the main application logic.<\/li>\n\n\n\n<li><strong>Scalability<\/strong>: Allows effortless addition of new modules (e.g., products, payments) without cluttering the main application file.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>How It Works<\/strong><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Requests to <\/strong><strong>\/orders<\/strong> are handled by the ordersRouter in routes\/orders.js.<\/li>\n\n\n\n<li><strong>Requests to <\/strong><strong>\/users<\/strong> are handled by the usersRouter in routes\/users.js.<\/li>\n\n\n\n<li>The app.js file acts as the central point to integrate and manage all these routers.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">This modular structure ensures your app remains maintainable and scalable as it grows.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Conclusion:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Divides Work<\/strong>: Express Router splits routes (like orders and users) into separate files, similar to assigning specific tasks to caf\u00e9 staff.<\/li>\n\n\n\n<li><strong>Keeps Things Organized<\/strong>: Avoids the mess of cramming everything into one file, just like dividing roles in a caf\u00e9 keeps operations smooth.<\/li>\n\n\n\n<li><strong>Easier to Expand<\/strong>: Adding new features in the app is simpler, like hiring more staff to handle increased caf\u00e9 demand.<\/li>\n\n\n\n<li><strong>Improves Efficiency<\/strong>: Each router handles its task independently, ensuring the app stays maintainable, just like staff focusing on their roles.<\/li>\n\n\n\n<li><strong>Supports Growth<\/strong>: The structure allows the app to grow without chaos, just as a well-organized caf\u00e9 handles more customers effortlessly.<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Hello everyone! My name is Julian, and today we\u2019re going to discuss routers.But before diving into the details, let me share a recent experience which i had. My cousin Jimmy&hellip;<\/p>\n","protected":false},"author":6,"featured_media":1242,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[],"class_list":["post-1239","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tips"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Express Router Script Example | How to Structure Routes in Node.js<\/title>\n<meta name=\"description\" content=\"Learn how to create and use router scripts in Express.js to organize routes in your Node.js applications. Includes code examples for clean and scalable project structure.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.sharpener.tech\/blog\/router-script\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Express Router Script Example | How to Structure Routes in Node.js\" \/>\n<meta property=\"og:description\" content=\"Learn how to create and use router scripts in Express.js to organize routes in your Node.js applications. Includes code examples for clean and scalable project structure.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sharpener.tech\/blog\/router-script\/\" \/>\n<meta property=\"og:site_name\" content=\"Sharpener Tech\" \/>\n<meta property=\"article:published_time\" content=\"2025-05-14T13:30:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-05-14T13:30:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/sharpener-wordpress.s3.ap-south-1.amazonaws.com\/blog\/wp-content\/uploads\/2025\/05\/14133018\/Router-Script.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Julian Toppo\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Julian Toppo\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/router-script\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/router-script\\\/\"},\"author\":{\"name\":\"Julian Toppo\",\"@id\":\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/#\\\/schema\\\/person\\\/eb9482df421e52d30f961eae8a0fd67a\"},\"headline\":\"Jimmy\u2019s Busy Cafe \u2013 A Perfect Parallel to Router in Express.js\",\"datePublished\":\"2025-05-14T13:30:28+00:00\",\"dateModified\":\"2025-05-14T13:30:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/router-script\\\/\"},\"wordCount\":990,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/router-script\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/sharpener-wordpress.s3.ap-south-1.amazonaws.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/14133018\\\/Router-Script.jpg\",\"articleSection\":[\"Tips\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/router-script\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/router-script\\\/\",\"url\":\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/router-script\\\/\",\"name\":\"Express Router Script Example | How to Structure Routes in Node.js\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/router-script\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/router-script\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/sharpener-wordpress.s3.ap-south-1.amazonaws.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/14133018\\\/Router-Script.jpg\",\"datePublished\":\"2025-05-14T13:30:28+00:00\",\"dateModified\":\"2025-05-14T13:30:29+00:00\",\"description\":\"Learn how to create and use router scripts in Express.js to organize routes in your Node.js applications. Includes code examples for clean and scalable project structure.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/router-script\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/router-script\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/router-script\\\/#primaryimage\",\"url\":\"https:\\\/\\\/sharpener-wordpress.s3.ap-south-1.amazonaws.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/14133018\\\/Router-Script.jpg\",\"contentUrl\":\"https:\\\/\\\/sharpener-wordpress.s3.ap-south-1.amazonaws.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/14133018\\\/Router-Script.jpg\",\"width\":1536,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/router-script\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Jimmy\u2019s Busy Cafe \u2013 A Perfect Parallel to Router in Express.js\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/\",\"name\":\"Sharpener Tech\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/#organization\",\"name\":\"Sharpener Tech\",\"url\":\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/wordpress-prod.sharpener.tech\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/Sharpener_logo-removebg-preview.png\",\"contentUrl\":\"https:\\\/\\\/wordpress-prod.sharpener.tech\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/Sharpener_logo-removebg-preview.png\",\"width\":187,\"height\":62,\"caption\":\"Sharpener Tech\"},\"image\":{\"@id\":\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/#\\\/schema\\\/person\\\/eb9482df421e52d30f961eae8a0fd67a\",\"name\":\"Julian Toppo\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/87799fed7134aa3bb27606b4eceeb577117023517d38b0152340c9e59376052c?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/87799fed7134aa3bb27606b4eceeb577117023517d38b0152340c9e59376052c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/87799fed7134aa3bb27606b4eceeb577117023517d38b0152340c9e59376052c?s=96&d=mm&r=g\",\"caption\":\"Julian Toppo\"},\"url\":\"https:\\\/\\\/www.sharpener.tech\\\/blog\\\/author\\\/julian\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Express Router Script Example | How to Structure Routes in Node.js","description":"Learn how to create and use router scripts in Express.js to organize routes in your Node.js applications. Includes code examples for clean and scalable project structure.","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:\/\/www.sharpener.tech\/blog\/router-script\/","og_locale":"en_US","og_type":"article","og_title":"Express Router Script Example | How to Structure Routes in Node.js","og_description":"Learn how to create and use router scripts in Express.js to organize routes in your Node.js applications. Includes code examples for clean and scalable project structure.","og_url":"https:\/\/www.sharpener.tech\/blog\/router-script\/","og_site_name":"Sharpener Tech","article_published_time":"2025-05-14T13:30:28+00:00","article_modified_time":"2025-05-14T13:30:29+00:00","og_image":[{"width":1536,"height":1024,"url":"https:\/\/sharpener-wordpress.s3.ap-south-1.amazonaws.com\/blog\/wp-content\/uploads\/2025\/05\/14133018\/Router-Script.jpg","type":"image\/jpeg"}],"author":"Julian Toppo","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Julian Toppo","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.sharpener.tech\/blog\/router-script\/#article","isPartOf":{"@id":"https:\/\/www.sharpener.tech\/blog\/router-script\/"},"author":{"name":"Julian Toppo","@id":"https:\/\/www.sharpener.tech\/blog\/#\/schema\/person\/eb9482df421e52d30f961eae8a0fd67a"},"headline":"Jimmy\u2019s Busy Cafe \u2013 A Perfect Parallel to Router in Express.js","datePublished":"2025-05-14T13:30:28+00:00","dateModified":"2025-05-14T13:30:29+00:00","mainEntityOfPage":{"@id":"https:\/\/www.sharpener.tech\/blog\/router-script\/"},"wordCount":990,"commentCount":0,"publisher":{"@id":"https:\/\/www.sharpener.tech\/blog\/#organization"},"image":{"@id":"https:\/\/www.sharpener.tech\/blog\/router-script\/#primaryimage"},"thumbnailUrl":"https:\/\/sharpener-wordpress.s3.ap-south-1.amazonaws.com\/blog\/wp-content\/uploads\/2025\/05\/14133018\/Router-Script.jpg","articleSection":["Tips"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.sharpener.tech\/blog\/router-script\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.sharpener.tech\/blog\/router-script\/","url":"https:\/\/www.sharpener.tech\/blog\/router-script\/","name":"Express Router Script Example | How to Structure Routes in Node.js","isPartOf":{"@id":"https:\/\/www.sharpener.tech\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.sharpener.tech\/blog\/router-script\/#primaryimage"},"image":{"@id":"https:\/\/www.sharpener.tech\/blog\/router-script\/#primaryimage"},"thumbnailUrl":"https:\/\/sharpener-wordpress.s3.ap-south-1.amazonaws.com\/blog\/wp-content\/uploads\/2025\/05\/14133018\/Router-Script.jpg","datePublished":"2025-05-14T13:30:28+00:00","dateModified":"2025-05-14T13:30:29+00:00","description":"Learn how to create and use router scripts in Express.js to organize routes in your Node.js applications. Includes code examples for clean and scalable project structure.","breadcrumb":{"@id":"https:\/\/www.sharpener.tech\/blog\/router-script\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sharpener.tech\/blog\/router-script\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sharpener.tech\/blog\/router-script\/#primaryimage","url":"https:\/\/sharpener-wordpress.s3.ap-south-1.amazonaws.com\/blog\/wp-content\/uploads\/2025\/05\/14133018\/Router-Script.jpg","contentUrl":"https:\/\/sharpener-wordpress.s3.ap-south-1.amazonaws.com\/blog\/wp-content\/uploads\/2025\/05\/14133018\/Router-Script.jpg","width":1536,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/www.sharpener.tech\/blog\/router-script\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sharpener.tech\/blog\/"},{"@type":"ListItem","position":2,"name":"Jimmy\u2019s Busy Cafe \u2013 A Perfect Parallel to Router in Express.js"}]},{"@type":"WebSite","@id":"https:\/\/www.sharpener.tech\/blog\/#website","url":"https:\/\/www.sharpener.tech\/blog\/","name":"Sharpener Tech","description":"","publisher":{"@id":"https:\/\/www.sharpener.tech\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sharpener.tech\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.sharpener.tech\/blog\/#organization","name":"Sharpener Tech","url":"https:\/\/www.sharpener.tech\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sharpener.tech\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/wordpress-prod.sharpener.tech\/wp-content\/uploads\/2026\/05\/Sharpener_logo-removebg-preview.png","contentUrl":"https:\/\/wordpress-prod.sharpener.tech\/wp-content\/uploads\/2026\/05\/Sharpener_logo-removebg-preview.png","width":187,"height":62,"caption":"Sharpener Tech"},"image":{"@id":"https:\/\/www.sharpener.tech\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.sharpener.tech\/blog\/#\/schema\/person\/eb9482df421e52d30f961eae8a0fd67a","name":"Julian Toppo","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/87799fed7134aa3bb27606b4eceeb577117023517d38b0152340c9e59376052c?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/87799fed7134aa3bb27606b4eceeb577117023517d38b0152340c9e59376052c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/87799fed7134aa3bb27606b4eceeb577117023517d38b0152340c9e59376052c?s=96&d=mm&r=g","caption":"Julian Toppo"},"url":"https:\/\/www.sharpener.tech\/blog\/author\/julian\/"}]}},"_links":{"self":[{"href":"https:\/\/www.sharpener.tech\/blog\/wp-json\/wp\/v2\/posts\/1239","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sharpener.tech\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sharpener.tech\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sharpener.tech\/blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sharpener.tech\/blog\/wp-json\/wp\/v2\/comments?post=1239"}],"version-history":[{"count":1,"href":"https:\/\/www.sharpener.tech\/blog\/wp-json\/wp\/v2\/posts\/1239\/revisions"}],"predecessor-version":[{"id":1243,"href":"https:\/\/www.sharpener.tech\/blog\/wp-json\/wp\/v2\/posts\/1239\/revisions\/1243"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.sharpener.tech\/blog\/wp-json\/wp\/v2\/media\/1242"}],"wp:attachment":[{"href":"https:\/\/www.sharpener.tech\/blog\/wp-json\/wp\/v2\/media?parent=1239"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sharpener.tech\/blog\/wp-json\/wp\/v2\/categories?post=1239"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sharpener.tech\/blog\/wp-json\/wp\/v2\/tags?post=1239"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}