timeout middleware
Timeout una richiesta nel framework dell’applicazione Connect/Express.
Installa
Questo è un modulo Node.js disponibile attraverso la
npm registry. L’installazione viene eseguita usando il comando
npm install:
$ npm install connect-timeoutAPI
NOTA Questo modulo non è consigliato come middleware “top-level” (es.
app.use(timeout('5s')) a meno che non si prendano precauzioni per fermare la propria elaborazione di middleware
. Vedi come middleware
per come usare come middleware di primo livello.
Mentre la libreria emetterà un evento ‘timeout’ quando le richieste superano il timeout dato, il nodo continuerà a elaborare la richiesta lenta fino alla sua chiusura. Le richieste lente continueranno a utilizzare CPU e memoria, anche se si sta restituendo una risposta HTTP nel timeout callback. Per un migliore controllo su CPU/memoria, potrebbe essere necessario trovare gli eventi che richiedono molto tempo (richieste HTTP di terze parti, disco I/O, chiamate di database) e trovare un modo per annullarli, e/o chiudere i socket collegati.
timeout(time, [options])
Restituisce il middleware che si chiude in time millisecondi. time può anche
essere una stringa accettata dal modulo ms
. In timeout, req emetterà "timeout".
Opzioni
La funzione timeout richiede un oggetto options opzionale che può contenere
una delle seguenti chiavi:
rispondi
Controlla se questo modulo “risponde” sotto forma di inoltro di un errore.
Se true, l’errore di timeout viene passato a next() in modo da poter personalizzare
il comportamento della risposta. Questo errore ha una proprietà .timeout e
.status == 503. Questo valore predefinito è true.
req.clearTimeout()
Cancella il timeout sulla richiesta. Il timeout è completamente rimosso e non sparerà per questa richiesta in futuro.
req.timedout
true se il timeout è stato licenziato; false altrimenti.
Esempi
come middleware di alto livello
A causa dei lavori di lavorazione middleware, una volta che questo modulo passa la richiesta al prossimo middleware (che deve fare in ordine per fare lavoro), non può più fermare il flusso, quindi devi fare in modo che controlli se la richiesta è scaduta prima di continuare ad agire su su richiesta.
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 timeoutvar 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);express 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);connetti
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);