如何在 node.js 中使用 'limiter'
How to use 'limiter' in node.js
我正在尝试在我的应用程序中实施一些反垃圾邮件机制。我遇到了 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(...);
}
});
'response'在哪里定义的?我们不需要使用 app.use() 将限制器连接到路径吗?否则限制器如何知道传入 IP?
几天前我试过这个包。该包用于记录一段时间内的请求次数。请求来自哪里并不重要。所以这个包不关心传入的 IP 地址是什么。
确实需要在application中间件中添加代码来限制整个应用或者一个route中间件对于指定的路线。然后就可以得到response对象。下面是一个简单的用法。
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 and express-limiter。
我正在尝试在我的应用程序中实施一些反垃圾邮件机制。我遇到了 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(...);
}
});
'response'在哪里定义的?我们不需要使用 app.use() 将限制器连接到路径吗?否则限制器如何知道传入 IP?
几天前我试过这个包。该包用于记录一段时间内的请求次数。请求来自哪里并不重要。所以这个包不关心传入的 IP 地址是什么。
确实需要在application中间件中添加代码来限制整个应用或者一个route中间件对于指定的路线。然后就可以得到response对象。下面是一个简单的用法。
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 and express-limiter。