代码之家  ›  专栏  ›  技术社区  ›  Chong Lip Phang

如何在node.js中使用“limiter”

  •  2
  • Chong Lip Phang  · 技术社区  · 7 年前

    我正在尝试在我的应用程序中实现一些反垃圾邮件机制。我遇到了 the limiter package .

    我读了他们的例子后感到困惑:

    var RateLimiter = require('limiter').RateLimiter;
    var limiter = new RateLimiter(150, 'hour', true);  // fire CB immediately
    
    // Immediately send 429 header to client when rate limiting is in effect
    limiter.removeTokens(1, function(err, remainingRequests) {
      if (remainingRequests < 1) {
        response.writeHead(429, {'Content-Type': 'text/plain;charset=UTF-8'});
        response.end('429 Too Many Requests - your IP is being rate limited');
      } else {
        callMyMessageSendingFunction(...);
      }
    });
    

    哪里定义了“响应”?我们不需要用app.use()把限制器挂到一条路径上吗?限制器如何知道传入的IP?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Chong Lip Phang    7 年前

    我几天前试过这个包裹。此包用于记录一段时间内的请求计数。请求来自何处无关紧要。所以这个包不关心传入的IP地址是什么。

    确实,我们需要将代码添加到 应用 中间软件限制整个应用程序或 路线 指定路线的中间软件。然后你可以得到 响应 对象。下面是一个简单的用法。

    var express = require('express')
    var app = express()
    
    app.use(function (req, response, next) {
      limiter.removeTokens(1, function(err, remainingRequests) {
          if (remainingRequests < 1) {
            response.writeHead(429, {'Content-Type': 'text/plain;charset=UTF-8'});
            response.end('429 Too Many Requests - your IP is being rate limited');
          } else {
            next();
          }
        });
    })
    

    如果要跟踪指定的IP地址。我建议你 express-rate-limit express-limiter .