[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-10876":3},{"id":4,"name":5,"fullName":6,"owner":5,"repo":5,"description":7,"homepage":8,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":16,"stars30d":17,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":18,"rankGlobal":9,"rankLanguage":9,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":22,"hasPages":20,"topics":23,"createdAt":9,"pushedAt":9,"updatedAt":34,"readmeContent":35,"aiSummary":36,"trendingCount":15,"starSnapshotCount":15,"syncStatus":37,"lastSyncTime":38,"discoverSource":39},10876,"express-rate-limit","express-rate-limit\u002Fexpress-rate-limit","Basic rate-limiting middleware for the Express web server","https:\u002F\u002Fnpmjs.com\u002Fpackage\u002Fexpress-rate-limit",null,"TypeScript",3261,249,16,5,0,3,10,29.19,"Other",false,"main",true,[24,25,26,27,28,29,30,31,32,33],"api","express","express-js","express-middleware","nodejs","rate-limiter","rate-limiting","rest-api","security","web","2026-06-12 02:02:27","\u003Ch1 align=\"center\"> \u003Ccode>express-rate-limit\u003C\u002Fcode> \u003C\u002Fh1>\n\n\u003Cdiv align=\"center\">\n\n[![tests](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Factions\u002Fworkflow\u002Fstatus\u002Fexpress-rate-limit\u002Fexpress-rate-limit\u002Fci.yaml)](https:\u002F\u002Fgithub.com\u002Fexpress-rate-limit\u002Fexpress-rate-limit\u002Factions\u002Fworkflows\u002Fci.yaml)\n[![npm version](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002Fexpress-rate-limit.svg)](https:\u002F\u002Fnpmjs.org\u002Fpackage\u002Fexpress-rate-limit 'View this project on NPM')\n[![npm downloads](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fdm\u002Fexpress-rate-limit)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fexpress-rate-limit)\n[![license](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fl\u002Fexpress-rate-limit)](license.md)\n\n\u003C\u002Fdiv>\n\nBasic rate-limiting middleware for [Express](http:\u002F\u002Fexpressjs.com\u002F). Use to\nlimit repeated requests to public APIs and\u002For endpoints such as password reset.\nPlays nice with\n[express-slow-down](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fexpress-slow-down) and\n[ratelimit-header-parser](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fratelimit-header-parser).\n\n## Usage\n\nThe [full documentation](https:\u002F\u002Fexpress-rate-limit.mintlify.app\u002Foverview) is\navailable on-line.\n\n```ts\nimport { rateLimit } from 'express-rate-limit'\n\nconst limiter = rateLimit({\n\twindowMs: 15 * 60 * 1000, \u002F\u002F 15 minutes\n\tlimit: 100, \u002F\u002F Limit each IP to 100 requests per `window` (here, per 15 minutes).\n\tstandardHeaders: 'draft-8', \u002F\u002F draft-6: `RateLimit-*` headers; draft-7 & draft-8: combined `RateLimit` header\n\tlegacyHeaders: false, \u002F\u002F Disable the `X-RateLimit-*` headers.\n\tipv6Subnet: 56, \u002F\u002F Set to 60 or 64 to be less aggressive, or 52 or 48 to be more aggressive\n\t\u002F\u002F store: ... , \u002F\u002F Redis, Memcached, etc. See below.\n})\n\n\u002F\u002F Apply the rate limiting middleware to all requests.\napp.use(limiter)\n```\n\n### Data Stores\n\nThe rate limiter comes with a built-in memory store, and supports a variety of\n[external data stores](https:\u002F\u002Fexpress-rate-limit.mintlify.app\u002Freference\u002Fstores).\n\n### Configuration\n\nAll function options may be async. Click the name for additional info and\ndefault values.\n\n| Option                     | Type                                      | Remarks                                                                                         |\n| -------------------------- | ----------------------------------------- | ----------------------------------------------------------------------------------------------- |\n| [`windowMs`]               | `number`                                  | How long to remember requests for, in milliseconds.                                             |\n| [`limit`]                  | `number` \\| `function`                    | How many requests to allow.                                                                     |\n| [`message`]                | `string` \\| `json` \\| `function`          | Response to return after limit is reached.                                                      |\n| [`statusCode`]             | `number`                                  | HTTP status code after limit is reached (default is 429).                                       |\n| [`handler`]                | `function`                                | Function to run after limit is reached (overrides `message` and `statusCode` settings, if set). |\n| [`legacyHeaders`]          | `boolean`                                 | Enable the `X-Rate-Limit` header.                                                               |\n| [`standardHeaders`]        | `'draft-6'` \\| `'draft-7'` \\| `'draft-8'` | Enable the `Ratelimit` header.                                                                  |\n| [`identifier`]             | `string` \\| `function`                    | Name associated with the quota policy enforced by this rate limiter.                            |\n| [`store`]                  | `Store`                                   | Use a custom store to share hit counts across multiple nodes.                                   |\n| [`passOnStoreError`]       | `boolean`                                 | Allow (`true`) or block (`false`, default) traffic if the store becomes unavailable.            |\n| [`keyGenerator`]           | `function`                                | Identify users (defaults to IP address).                                                        |\n| [`ipv6Subnet`]             | `number` (32-64) \\| `function` \\| `false` | How many bits of IPv6 addresses to use in default `keyGenerator`                                |\n| [`requestPropertyName`]    | `string`                                  | Add rate limit info to the `req` object.                                                        |\n| [`skip`]                   | `function`                                | Return `true` to bypass the limiter for the given request.                                      |\n| [`skipSuccessfulRequests`] | `boolean`                                 | Uncount 1xx\u002F2xx\u002F3xx responses.                                                                  |\n| [`skipFailedRequests`]     | `boolean`                                 | Uncount 4xx\u002F5xx responses.                                                                      |\n| [`requestWasSuccessful`]   | `function`                                | Used by `skipSuccessfulRequests` and `skipFailedRequests`.                                      |\n| [`validate`]               | `boolean` \\| `object`                     | Enable or disable built-in validation checks.                                                   |\n| [`logger`]                 | `Logger`                                  | Custom logger                                                                                   |\n\n## Thank You\n\n---\n\nThanks to Mintlify for hosting the documentation at\n[express-rate-limit.mintlify.app](https:\u002F\u002Fexpress-rate-limit.mintlify.app)\n\n\u003Cp align=\"center\">\n\t\u003Ca href=\"https:\u002F\u002Fmintlify.com\u002F?utm_campaign=devmark&utm_medium=readme&utm_source=express-rate-limit\">\n\t\t\u003Cimg height=\"75\" src=\"https:\u002F\u002Fdevmark-public-assets.s3.us-west-2.amazonaws.com\u002Fsponsorships\u002Fmintlify.svg\" alt=\"Create your docs today\">\n\t\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\nAnd thank you to everyone who's contributed to this project in any way! 🫶\n\n## Issues and Contributing\n\nIf you encounter a bug or want to see something added\u002Fchanged, please go ahead\nand\n[open an issue](https:\u002F\u002Fgithub.com\u002Fexpress-rate-limit\u002Fexpress-rate-limit\u002Fissues\u002Fnew)!\nIf you need help with something, feel free to\n[start a discussion](https:\u002F\u002Fgithub.com\u002Fexpress-rate-limit\u002Fexpress-rate-limit\u002Fdiscussions\u002Fnew)!\n\nIf you wish to contribute to the library, thanks! First, please read\n[the contributing guide](https:\u002F\u002Fexpress-rate-limit.mintlify.app\u002Fguides\u002Fcontributing).\nThen you can pick up any issue and fix\u002Fimplement it!\n\n## License\n\nMIT © [Nathan Friedly](http:\u002F\u002Fnfriedly.com\u002F),\n[Vedant K](https:\u002F\u002Fgithub.com\u002Fgamemaker1)\n\n[`windowMs`]:\n\thttps:\u002F\u002Fexpress-rate-limit.mintlify.app\u002Freference\u002Fconfiguration#windowms\n[`limit`]: https:\u002F\u002Fexpress-rate-limit.mintlify.app\u002Freference\u002Fconfiguration#limit\n[`message`]:\n\thttps:\u002F\u002Fexpress-rate-limit.mintlify.app\u002Freference\u002Fconfiguration#message\n[`statusCode`]:\n\thttps:\u002F\u002Fexpress-rate-limit.mintlify.app\u002Freference\u002Fconfiguration#statuscode\n[`handler`]:\n\thttps:\u002F\u002Fexpress-rate-limit.mintlify.app\u002Freference\u002Fconfiguration#handler\n[`legacyHeaders`]:\n\thttps:\u002F\u002Fexpress-rate-limit.mintlify.app\u002Freference\u002Fconfiguration#legacyheaders\n[`standardHeaders`]:\n\thttps:\u002F\u002Fexpress-rate-limit.mintlify.app\u002Freference\u002Fconfiguration#standardheaders\n[`identifier`]:\n\thttps:\u002F\u002Fexpress-rate-limit.mintlify.app\u002Freference\u002Fconfiguration#identifier\n[`store`]: https:\u002F\u002Fexpress-rate-limit.mintlify.app\u002Freference\u002Fconfiguration#store\n[`passOnStoreError`]:\n\thttps:\u002F\u002Fexpress-rate-limit.mintlify.app\u002Freference\u002Fconfiguration#passonstoreerror\n[`keyGenerator`]:\n\thttps:\u002F\u002Fexpress-rate-limit.mintlify.app\u002Freference\u002Fconfiguration#keygenerator\n[`ipv6Subnet`]:\n\thttps:\u002F\u002Fexpress-rate-limit.mintlify.app\u002Freference\u002Fconfiguration#ipv6subnet\n[`requestPropertyName`]:\n\thttps:\u002F\u002Fexpress-rate-limit.mintlify.app\u002Freference\u002Fconfiguration#requestpropertyname\n[`skip`]: https:\u002F\u002Fexpress-rate-limit.mintlify.app\u002Freference\u002Fconfiguration#skip\n[`skipSuccessfulRequests`]:\n\thttps:\u002F\u002Fexpress-rate-limit.mintlify.app\u002Freference\u002Fconfiguration#skipsuccessfulrequests\n[`skipFailedRequests`]:\n\thttps:\u002F\u002Fexpress-rate-limit.mintlify.app\u002Freference\u002Fconfiguration#skipfailedrequests\n[`requestWasSuccessful`]:\n\thttps:\u002F\u002Fexpress-rate-limit.mintlify.app\u002Freference\u002Fconfiguration#requestwassuccessful\n[`validate`]:\n\thttps:\u002F\u002Fexpress-rate-limit.mintlify.app\u002Freference\u002Fconfiguration#validate\n[`logger`]:\n\thttps:\u002F\u002Fexpress-rate-limit.mintlify.app\u002Freference\u002Fconfiguration#logger\n","express-rate-limit 是一个为 Express 网络服务器设计的基础速率限制中间件。它能够帮助开发者控制对公共 API 或特定端点（如密码重置）的请求频率，防止滥用或恶意攻击。该项目支持多种配置选项，包括时间窗口、请求上限、响应头标准等，并且可以与外部数据存储（例如 Redis 和 Memcached）集成以适应不同的应用场景。其主要技术特点包括异步配置选项和对 IPv6 的良好支持。适用于需要保护资源免受过度请求影响的各种 Web 应用场景。",2,"2026-06-11 03:30:35","top_topic"]