Todas as solicitações são pré-selecionadas com app.use e injetadas em uma função de middleware. Isso é usado antes do pedido ser seguido para express.static ou app.rest (o objeto req) e mais uma vez antes de responder ao cliente (o objeto res). Você pode alterar req, res e opcionalmente usar a função de retorno de chamada (aqui chamado próximo ). Aqui está o truque. Se sua função de middleware nunca chamar o retorno de chamada next () , a solicitação não será atendida. Você pode usar um middleware, que conta os pedidos por ip por vez, e atende ou não a página. Pense que a lista de ip bloqueados aumentará e diminuirá o seu aplicativo. Middlewares precisam ser sincronizados para interceptar. Aqui está um exemplo de seu código necessário, com base no exemplo de API expressa do Google:
var express = require('express'),
app = express(),
util= require(util);
app.use(express.static(__dirname + '/public'));
// a first middleware, a logger in console, just to show ip
// usefull to debug
app.use(function(req, res, next){
console.log('%s %s from %s , proxy: %s', req.method, req.url, req.ip, util.inspect(req.ips));
next();
});
// a second middleware, what u need
app.use(filterUrReq);
app.get("blah", function(req, res) {
res.send(req.url + " well served to " + req.ip)
});
app.listen(8080);
// here the middleware function, it filters by ip, if ip is clean, call next callback.
function filterUrReq (req, res, next) {
if (req.ip == "15.89.111.111") {
console.log('i dont want to serve this IP, dont call next');
} else {
console.log('ok clean ip, go to next app.use');
next();
}
}
aqui as boas práticas para expressJS. link . Talvez sua pergunta esteja em stackoverflow ou talvez você precise de algo mais global, como fail2ban , dê uma olhada prisões problemáticas.