Zeitüberschreitung bei einer Anfrage im Connect/Express-Anwendungsframework.
Dies ist ein Node.js-Modul, das über die npm-Registrierung verfügbar ist. Die Installation erfolgt mit dem Befehl npm install
:
$ npm install connect-timeout
HINWEIS Dieses Modul wird nicht als „Top-Level“-Middleware (z. B. app.use(timeout('5s'))
) empfohlen, es sei denn, Sie treffen Vorkehrungen, um die Verarbeitung Ihrer eigenen Middleware anzuhalten. Informationen zur Verwendung als Top-Level-Middleware finden Sie unter „Als Top-Level-Middleware“.
Während die Bibliothek ein „Timeout“-Ereignis ausgibt, wenn Anforderungen das angegebene Zeitlimit überschreiten, verarbeitet der Knoten die langsame Anforderung weiter, bis sie beendet wird. Langsame Anfragen beanspruchen weiterhin CPU und Speicher, auch wenn Sie im Timeout-Callback eine HTTP-Antwort zurückgeben. Für eine bessere Kontrolle über CPU/Speicher müssen Sie möglicherweise die Ereignisse finden, die lange dauern (HTTP-Anfragen von Drittanbietern, Festplatten-E/A, Datenbankaufrufe) und eine Möglichkeit finden, sie abzubrechen und/oder die angeschlossenen Sockets zu schließen .
Gibt Middleware zurück, die innerhalb time
eine Zeitüberschreitung aufweist. time
kann auch eine vom ms-Modul akzeptierte Zeichenfolge sein. Bei Zeitüberschreitung gibt req
"timeout"
aus.
Die timeout
-Funktion benötigt ein optionales options
, das einen der folgenden Schlüssel enthalten kann:
Steuert, ob dieses Modul in Form einer Fehlerweiterleitung „antwortet“. Bei true
wird der Timeout-Fehler an next()
übergeben, sodass Sie das Antwortverhalten anpassen können. Dieser Fehler hat eine .timeout
Eigenschaft sowie .status == 503
. Der Standardwert ist true
.
Löscht die Zeitüberschreitung der Anfrage. Die Zeitüberschreitung wurde vollständig entfernt und wird für diese Anfrage in Zukunft nicht mehr ausgelöst.
true
wenn eine Zeitüberschreitung ausgelöst wurde; false
.
Aufgrund der Art und Weise, wie die Middleware-Verarbeitung funktioniert, kann dieses Modul, sobald es die Anforderung an die nächste Middleware weiterleitet (was es tun muss, damit Sie arbeiten können), den Fluss nicht mehr stoppen. Sie müssen also sorgfältig prüfen, ob die Das Zeitlimit für die Anfrage ist abgelaufen, bevor Sie mit der Bearbeitung der Anfrage fortfahren können.
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 )
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 )
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 )
MIT