timeout middleware

Délai d’une demande dans le cadre de l’application Connect/Express.

Installer

Ceci est un module Node.js disponible via npm registry. L’installation se fait à l’aide de la commande npm install:

Terminal window
$ npm install connect-timeout

API

NOTE Ce module n’est pas recommandé en tant que middleware “top-level” (c.-à-d. app.use(timeout('5s'))) à moins que vous ne preniez des précautions pour arrêter votre propre traitement middleware . Voir en tant que middleware de premier niveau pour savoir comment utiliser un middleware de premier niveau.

Tandis que la bibliothèque émettra un événement ‘timeout’ lorsque les requêtes dépassent le délai d’expiration de la requête donnée, le nœud continuera à traiter la requête lente jusqu’à ce qu’elle se termine. Slow requests will continue to use CPU and memory, even if you are returning a HTTP response in the timeout callback. Pour un meilleur contrôle de la mémoire CPU/, vous devrez peut-être trouver les événements qui prennent beaucoup de temps (3ème partie des requêtes HTTP , les E/S disques, les appels à la base de données) et trouver un moyen de les annuler, et/ou fermer les sockets.

timeout(heure, [options])

Retourne le middleware qui sort en temps millisecondes. time peut aussi être une chaîne acceptée par le module ms . Au cas du timeout, req émettra "timeout".

Options

The timeout function takes an optional options object that may contain any of the following keys:

répondre

Contrôle si ce module va “répondre” sous la forme de redirection d’une erreur. Si true, l’erreur de timeout est passée à next() afin que vous puissiez personnaliser le comportement de la réponse. Cette erreur a une propriété .timeout ainsi que .status == 503. La valeur par défaut est true.

req.clearTimeout()

Efface le délai d’attente de la requête. Le délai d’attente est complètement supprimé et ne tirera pas pour cette requête dans le futur.

Req.timeout

true si le délai a été dépassé; false sinon.

Exemples

comme middleware de haut niveau

À cause de la façon dont le traitement des middleware fonctionne, une fois que ce module passe la requête au prochain middleware (qu’il doit faire dans l’ordre pour que vous fassiez du travail), il ne peut plus arrêter le débit, donc vous devez prendre soin de vérifier si la requête a un délai avant de continuer à agir sur la demande.

var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var express = require('express');
var timeout = require('connect-timeout');
// example of using this top-level; note the use of haltOnTimedout
// after every middleware; it will stop the request flow on a timeout
var app = express();
app.use(timeout('5s'));
app.use(bodyParser());
app.use(haltOnTimedout);
app.use(cookieParser());
app.use(haltOnTimedout);
// Add your routes here, etc.
function haltOnTimedout(req, res, next) {
if (!req.timedout) next();
}
app.listen(3000);

exprès 3.x

var express = require('express');
var bodyParser = require('body-parser');
var timeout = require('connect-timeout');
var app = express();
app.post('/save', timeout('5s'), bodyParser.json(), haltOnTimedout, function (req, res, next) {
savePost(req.body, function (err, id) {
if (err) return next(err);
if (req.timedout) return;
res.send('saved as id ' + id);
});
});
function haltOnTimedout(req, res, next) {
if (!req.timedout) next();
}
function savePost(post, cb) {
setTimeout(
function () {
cb(null, (Math.random() * 40000) >>> 0);
},
(Math.random() * 7000) >>> 0
);
}
app.listen(3000);

se connecter

var bodyParser = require('body-parser');
var connect = require('connect');
var timeout = require('connect-timeout');
var app = connect();
app.use('/save', timeout('5s'), bodyParser.json(), haltOnTimedout, function (req, res, next) {
savePost(req.body, function (err, id) {
if (err) return next(err);
if (req.timedout) return;
res.send('saved as id ' + id);
});
});
function haltOnTimedout(req, res, next) {
if (!req.timedout) next();
}
function savePost(post, cb) {
setTimeout(
function () {
cb(null, (Math.random() * 40000) >>> 0);
},
(Math.random() * 7000) >>> 0
);
}
app.listen(3000);

Licence

MIT