{"id":47555,"date":"2023-12-28T18:44:08","date_gmt":"2023-12-28T13:14:08","guid":{"rendered":"https:\/\/www.oneclickitsolution.com\/blog\/?p=47555"},"modified":"2025-03-17T14:27:55","modified_gmt":"2025-03-17T08:57:55","slug":"rate-limiting-using-throttler-in-nestjs","status":"publish","type":"post","link":"https:\/\/www.oneclickitsolution.com\/blog\/rate-limiting-using-throttler-in-nestjs","title":{"rendered":"Rate Limiting Using Throttler In NestJs"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\" id=\"h-introduction\">Introduction<\/h2>\n\n\n\n<p>Rate limiting is used to restrict users to hit an endpoint for a limited amount of time. In other words, by rate limiting, we can control the number of incoming requests per time. As we can define the user can hit an endpoint 10 times every minute. So, if anyone hits that endpoint more than 10 times, then it will throw an error and the user can not access that URL for a limited amount of time.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why do We Need To Use Rate Limiting?<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Rate limiting is mainly used for managing the frequency of incoming requests per duration.<\/li>\n\n\n\n<li>Better server load management.<\/li>\n\n\n\n<li>Reduced risk of attacks like Brute Force.<\/li>\n\n\n\n<li>The server will never be overloaded by incoming API calls.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Drawbacks of Rate Limiting<\/h2>\n\n\n\n<p>As we discussed, Rate Limit handles the number of requests per specified duration, so in some cases, it may block our traffic from accessing our site.<\/p>\n\n\n\n<p>Sometimes it may block legitimate users from accessing our site. It can not identify between legitimate and spam traffic. Due to this our real users might not be able to access our application.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Example of Rate Limiting in NestJs<\/h2>\n\n\n\n<p>In this example, we will see how we can use the Throttler package for rate limiting.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1<\/h3>\n\n\n\n<p>Install package:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">npm i --save @nestjs\/throttler<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2<\/h3>\n\n\n\n<p>After the successful installation of the package, you can use ThrottlerModule just like any other module of the nest. You can use this module with <strong>forRoot<\/strong> or <strong>forRootAsync<\/strong> methods. In your <strong>app.module.ts<\/strong> file import module like :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">@Module({\n\timports: [\n\t   ThrottlerModule.forRoot({\n\t      ttl : 60,\n\t      limit : 10,\n\t   }),\n         ],\n})\nexport class AppModule {}<\/code><\/pre>\n\n\n\n<p>In the above code \u201cttl\u201d is Time To Live, which means the amount of time at which you want to restrict the requests. And the limit is used for the amount of requests per ttl.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3<\/h3>\n\n\n\n<p>After importing you need to use a guard to use this module globally.<br>For that you need to do like:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">providers: [\n   {\n     provide: APP_GUARD,\n     useClass: ThrottlerGuard,\n   },\n]<\/code><\/pre>\n\n\n\n<p>By doing this now your Rate limit is set to 10 Requests per minute for every endpoint of your project.<\/p>\n\n\n\n<p><strong>app.module.ts<\/strong> file will look like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">import { Module } from '@nestjs\/common';\nimport { AppController } from '.\/app.controller';\nimport { AppService } from '.\/app.service';\nimport { UsersModule } from '.\/users\/users.module';\nimport { ThrottlerModule, ThrottlerGuard } from '@nestjs\/throttler';\nimport { APP_GUARD } from '@nestjs\/core';\n \n@Module({\n   imports: [UsersModule,\n       ThrottlerModule.forRoot({\n           ttl: 60,\n           limit: 2\n       })\n   ],\n   controllers:[AppController],\n   providers: [AppService,\n       {\n           provide: APP_GUARD,\n           useClass: ThrottlerGuard\n       }\n   ]\n})\nexport class AppModule {}<\/code><\/pre>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n<div class=\"box_section_read\">\n<p style=\"border-left: 5px solid #0072bb; padding: 10px 20px; font-size: 20px; line-height: 22px; color: #0072bb; text-align: center; font-style: italic; margin-bottom: 0px; font-weight: 700;\"><span style=\"color:#000000\"> Read More:<\/span> <a href=\"https:\/\/www.oneclickitsolution.com\/blog\/migrations-with-typeorm\/\" target=\"_blank\" rel=\"noreferrer noopener\">Migrations with TypeORM in NestJs<\/a><\/p>\n<\/div>\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4<\/h3>\n\n\n\n<p>Now if you want to Skip some modules from Rate limiting then you need to specify <strong>SkipThrottle()<\/strong> function in that controller like:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">@SkipThrottle()\n@Controller('users')\nexport class UsersController {}<\/code><\/pre>\n\n\n\n<p>Now the rate limit will not apply to any of this controller\u2019s route.<\/p>\n\n\n\n<p>If you want to override \u201cttl\u201d or \u201climit\u201d which is set globally, then you need to mention that like:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">@Throttle(3, 60)\n@Get('list')    \n@HttpCode(200)\nlist() {    \n  return \"List works with custom rate limiting.\";\n}<\/code><\/pre>\n\n\n\n<p>This will override default configurations for this specific route.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">import { Controller, Get, HttpCode } from '@nestjs\/common';\nimport { SkipThrottle, Throttle, ThrottlerGuard } from '@nestjs\/throttler';\n \n@SkipThrottle()\n@Controller('users')\nexport class UsersController {\n \n   \/\/ This route will skip rate limiting.\n   @Get('list-skip')\n   @HttpCode(200)\n   listSkip(){\n       return \"List work without Rate limiting\"\n   }\n\n   \/\/ Rate limiting is applied to this route.\n   @SkipThrottle(false)\n   @Get('list')\n   @HttpCode(200)\n   dontSkip(){\n       return \"List work with Rate limiting\"\n}\n \n   \/\/ Override default configuration for Rate limiting and duration.\n   @Throttle(3, 60)\n   @Get('get-profile')\n   @HttpCode(200)\n   getProfile(){\n       return \"Get profile with custom Rate limiting.\"\n   }\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Where We Can Use This Technique In Our App?<\/h2>\n\n\n\n<p>In any app, the most important thing is log in and Register APIs. So we need to secure those <strong><a data-abc=\"true\" href=\"https:\/\/www.oneclickitsolution.com\/travel\/travel-api-integration\/\" target=\"_blank\" rel=\"noreferrer noopener\">APIs<\/a><\/strong> first. So, we can apply rate limiting on the APIs like Login, Register, Forgot password, etc.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.oneclickitsolution.com\/contact-us\/\"><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"300\" src=\"https:\/\/www.oneclickitsolution.com\/blog\/wp-content\/uploads\/2021\/12\/web-development-framework.png\" alt=\"web development framework\" class=\"wp-image-54384\" srcset=\"https:\/\/www.oneclickitsolution.com\/blog\/wp-content\/uploads\/2021\/12\/web-development-framework.png 1200w, https:\/\/www.oneclickitsolution.com\/blog\/wp-content\/uploads\/2021\/12\/web-development-framework-768x192.png 768w, https:\/\/www.oneclickitsolution.com\/blog\/wp-content\/uploads\/2021\/12\/web-development-framework-20x5.png 20w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/a><\/figure>\n\n\n\n<p>Any Payment-related API &#8211; If your APP contains a <strong><a href=\"https:\/\/www.oneclickitsolution.com\/travel\/payment-gateway-integration\/\" target=\"_blank\" rel=\"noreferrer noopener\">Payment-related API<\/a><\/strong> where you are transferring some payment data then you can apply a Rate Limit there to prevent attacks like Brute force.<\/p>\n\n\n\n<p>APIs Which Are Having Large Data &#8211; We can use this where we have large Response data in API. By doing this we can restrict multiple API calls at the same time and it will optimize the server load.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Rate limiting is used to restrict users to hit an endpoint for a limited amount of time. In other words, by rate limiting, we can control the number of incoming requests per time. As we can define the user can hit an endpoint 10 times every minute. So, if anyone hits that endpoint more &hellip;<\/p>\n","protected":false},"author":13,"featured_media":54461,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[838,784],"tags":[916,917],"class_list":["post-47555","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-solutions","category-web-application","tag-nestjs","tag-rate-limiting"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v18.2.1 (Yoast SEO v24.8.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Rate Limiting Using Throttler in NestJs<\/title>\n<meta name=\"description\" content=\"In this blog we will share you Rate Limiting Using Throttler In NestJs. Rate limiting is mainly used for managing the frequency of incoming requests per duration.\" \/>\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.oneclickitsolution.com\/blog\/rate-limiting-using-throttler-in-nestjs\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Rate Limiting Using Throttler in NestJs\" \/>\n<meta property=\"og:description\" content=\"In this blog we will share you Rate Limiting Using Throttler In NestJs. Rate limiting is mainly used for managing the frequency of incoming requests per duration.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.oneclickitsolution.com\/blog\/rate-limiting-using-throttler-in-nestjs\" \/>\n<meta property=\"og:site_name\" content=\"OneClick IT Consultancy\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/oneclickconsultancy\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-28T13:14:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-03-17T08:57:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.oneclickitsolution.com\/blog\/wp-content\/uploads\/2022\/01\/rate-limiting-using-throttler-in-nestjs.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Rajesh Shiyani\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@OneclickIT\" \/>\n<meta name=\"twitter:site\" content=\"@OneclickIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Rajesh Shiyani\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Rate Limiting Using Throttler in NestJs","description":"In this blog we will share you Rate Limiting Using Throttler In NestJs. Rate limiting is mainly used for managing the frequency of incoming requests per duration.","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.oneclickitsolution.com\/blog\/rate-limiting-using-throttler-in-nestjs","og_locale":"en_US","og_type":"article","og_title":"Rate Limiting Using Throttler in NestJs","og_description":"In this blog we will share you Rate Limiting Using Throttler In NestJs. Rate limiting is mainly used for managing the frequency of incoming requests per duration.","og_url":"https:\/\/www.oneclickitsolution.com\/blog\/rate-limiting-using-throttler-in-nestjs","og_site_name":"OneClick IT Consultancy","article_publisher":"https:\/\/www.facebook.com\/oneclickconsultancy","article_published_time":"2023-12-28T13:14:08+00:00","article_modified_time":"2025-03-17T08:57:55+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/www.oneclickitsolution.com\/blog\/wp-content\/uploads\/2022\/01\/rate-limiting-using-throttler-in-nestjs.png","type":"image\/png"}],"author":"Rajesh Shiyani","twitter_card":"summary_large_image","twitter_creator":"@OneclickIT","twitter_site":"@OneclickIT","twitter_misc":{"Written by":"Rajesh Shiyani","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.oneclickitsolution.com\/blog\/rate-limiting-using-throttler-in-nestjs#article","isPartOf":{"@id":"https:\/\/www.oneclickitsolution.com\/blog\/rate-limiting-using-throttler-in-nestjs"},"author":{"name":"Rajesh Shiyani","@id":"https:\/\/www.oneclickitsolution.com\/blog\/#\/schema\/person\/800637c494b48280bd7d08cb952782b3"},"headline":"Rate Limiting Using Throttler In NestJs","datePublished":"2023-12-28T13:14:08+00:00","dateModified":"2025-03-17T08:57:55+00:00","mainEntityOfPage":{"@id":"https:\/\/www.oneclickitsolution.com\/blog\/rate-limiting-using-throttler-in-nestjs"},"wordCount":523,"commentCount":0,"publisher":{"@id":"https:\/\/www.oneclickitsolution.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.oneclickitsolution.com\/blog\/rate-limiting-using-throttler-in-nestjs#primaryimage"},"thumbnailUrl":"https:\/\/www.oneclickitsolution.com\/blog\/wp-content\/uploads\/2022\/01\/rate-limiting-using-throttler-in-nestjs.png","keywords":["NestJs","Rate Limiting"],"articleSection":["Solutions","Web Application"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.oneclickitsolution.com\/blog\/rate-limiting-using-throttler-in-nestjs#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.oneclickitsolution.com\/blog\/rate-limiting-using-throttler-in-nestjs","url":"https:\/\/www.oneclickitsolution.com\/blog\/rate-limiting-using-throttler-in-nestjs","name":"Rate Limiting Using Throttler in NestJs","isPartOf":{"@id":"https:\/\/www.oneclickitsolution.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.oneclickitsolution.com\/blog\/rate-limiting-using-throttler-in-nestjs#primaryimage"},"image":{"@id":"https:\/\/www.oneclickitsolution.com\/blog\/rate-limiting-using-throttler-in-nestjs#primaryimage"},"thumbnailUrl":"https:\/\/www.oneclickitsolution.com\/blog\/wp-content\/uploads\/2022\/01\/rate-limiting-using-throttler-in-nestjs.png","datePublished":"2023-12-28T13:14:08+00:00","dateModified":"2025-03-17T08:57:55+00:00","description":"In this blog we will share you Rate Limiting Using Throttler In NestJs. Rate limiting is mainly used for managing the frequency of incoming requests per duration.","breadcrumb":{"@id":"https:\/\/www.oneclickitsolution.com\/blog\/rate-limiting-using-throttler-in-nestjs#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.oneclickitsolution.com\/blog\/rate-limiting-using-throttler-in-nestjs"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.oneclickitsolution.com\/blog\/rate-limiting-using-throttler-in-nestjs#primaryimage","url":"https:\/\/www.oneclickitsolution.com\/blog\/wp-content\/uploads\/2022\/01\/rate-limiting-using-throttler-in-nestjs.png","contentUrl":"https:\/\/www.oneclickitsolution.com\/blog\/wp-content\/uploads\/2022\/01\/rate-limiting-using-throttler-in-nestjs.png","width":1200,"height":628,"caption":"rate limiting using throttler in nestjs"},{"@type":"BreadcrumbList","@id":"https:\/\/www.oneclickitsolution.com\/blog\/rate-limiting-using-throttler-in-nestjs#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog","item":"https:\/\/www.oneclickitsolution.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Rate Limiting Using Throttler In NestJs"}]},{"@type":"WebSite","@id":"https:\/\/www.oneclickitsolution.com\/blog\/#website","url":"https:\/\/www.oneclickitsolution.com\/blog\/","name":"OneClick IT Consultancy","description":"We Build Brands from Ideas","publisher":{"@id":"https:\/\/www.oneclickitsolution.com\/blog\/#organization"},"alternateName":"OneClick IT Solution","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.oneclickitsolution.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.oneclickitsolution.com\/blog\/#organization","name":"OneClick IT Consultancy","alternateName":"OneClick IT Solution","url":"https:\/\/www.oneclickitsolution.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.oneclickitsolution.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.oneclickitsolution.com\/blog\/wp-content\/uploads\/2022\/10\/oneclick-official-logo.png","contentUrl":"https:\/\/www.oneclickitsolution.com\/blog\/wp-content\/uploads\/2022\/10\/oneclick-official-logo.png","width":100,"height":100,"caption":"OneClick IT Consultancy"},"image":{"@id":"https:\/\/www.oneclickitsolution.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/oneclickconsultancy","https:\/\/x.com\/OneclickIT","https:\/\/www.instagram.com\/oneclick.it.consultancy\/","https:\/\/www.linkedin.com\/company\/one-click-it-consultancy\/","https:\/\/www.pinterest.com\/oneclickitconsultancy\/","https:\/\/www.youtube.com\/channel\/UCsEG6aiwOwvYrcZxMoP5xjg","https:\/\/oneclickit.tumblr.com\/","https:\/\/dribbble.com\/oneclickitconsultancy"]},{"@type":"Person","@id":"https:\/\/www.oneclickitsolution.com\/blog\/#\/schema\/person\/800637c494b48280bd7d08cb952782b3","name":"Rajesh Shiyani","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.oneclickitsolution.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/2e3933b9456aa4aede04db5a527d2a1c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2e3933b9456aa4aede04db5a527d2a1c?s=96&d=mm&r=g","caption":"Rajesh Shiyani"},"description":"Experienced Web Developer with a demonstrated history of working in the IT industry. Skilled in NodeJs, Angular, Laravel, CodeIgniter, HTML, CSS, Javascript, Jquery, My SQL, Postgresql. Always looking for new technologies to explore and learn new things.","sameAs":["oneclick"],"jobTitle":"Software Engineer","url":"https:\/\/www.oneclickitsolution.com\/blog\/author\/rajesh"}]}},"_links":{"self":[{"href":"https:\/\/www.oneclickitsolution.com\/blog\/wp-json\/wp\/v2\/posts\/47555"}],"collection":[{"href":"https:\/\/www.oneclickitsolution.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.oneclickitsolution.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.oneclickitsolution.com\/blog\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/www.oneclickitsolution.com\/blog\/wp-json\/wp\/v2\/comments?post=47555"}],"version-history":[{"count":1,"href":"https:\/\/www.oneclickitsolution.com\/blog\/wp-json\/wp\/v2\/posts\/47555\/revisions"}],"predecessor-version":[{"id":62963,"href":"https:\/\/www.oneclickitsolution.com\/blog\/wp-json\/wp\/v2\/posts\/47555\/revisions\/62963"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.oneclickitsolution.com\/blog\/wp-json\/wp\/v2\/media\/54461"}],"wp:attachment":[{"href":"https:\/\/www.oneclickitsolution.com\/blog\/wp-json\/wp\/v2\/media?parent=47555"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.oneclickitsolution.com\/blog\/wp-json\/wp\/v2\/categories?post=47555"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.oneclickitsolution.com\/blog\/wp-json\/wp\/v2\/tags?post=47555"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}