Parçacıklara Dön
Node.jsTypeScript

Node.js Hız Sınırlayıcı

API'leri kötüye kullanımdan korumak için bellek içi hız sınırlayıcı middleware.

nodejsrate limitapisecurity
import type { Request, Response, NextFunction } from class=class="text-emerald-400">"text-emerald-400">'express'

interface RateLimitEntry {
  count: number
  resetAt: number
}

function createRateLimiter(options: { windowMs: number; max: number }) {
  const { windowMs, max } = options
  const store = new Map<string, RateLimitEntry>()

  class=class="text-emerald-400">"text-gray">// Cleanup expired entries every minute
  setInterval(() => {
    const now = Date.now()
    for (const [key, entry] of store) {
      if (entry.resetAt < now) store.delete(key)
    }
  }, 60_000)

  return (req: Request, res: Response, next: NextFunction) => {
    const key = req.ip || class=class="text-emerald-400">"text-emerald-400">'unknown'
    const now = Date.now()
    const entry = store.get(key)

    if (!entry || entry.resetAt < now) {
      store.set(key, { count: 1, resetAt: now + windowMs })
      return next()
    }

    if (entry.count >= max) {
      res.set(class=class="text-emerald-400">"text-emerald-400">'Retry-After', String(Math.ceil((entry.resetAt - now) / 1000)))
      return res.status(429).json({ error: class=class="text-emerald-400">"text-emerald-400">'Too many requests' })
    }

    entry.count++
    next()
  }
}

export const apiLimiter = createRateLimiter({ windowMs: 60_000, max: 100 })

Nasıl Kullanılır

Route'lara uygulayın: app.use('/api', apiLimiter). IP başına dakikada 100 isteğe izin verir. Üretim ortamı için çoklu instance desteği amacıyla Map deposunu Redis ile değiştirin.

İlgili Teknoloji

Node.js

Aklınızda Bir Proje mi Var?

Fikrinizi nasıl hayata geçirebileceğimizi konuşalım. İlk konseptten üretime hazır ürüne kadar — yanınızdayız.

veya ücretsiz görüşme ayarlayın