El tiempo de espera de una solicitud en el marco de la aplicación Connect/Express.
Este es un módulo de Node.js disponible a través del registro npm. La instalación se realiza mediante el comando npm install
:
$ npm install connect-timeout
NOTA Este módulo no se recomienda como middleware de "nivel superior" (es decir, app.use(timeout('5s'))
) a menos que tome precauciones para detener su propio procesamiento de middleware. Consulte como middleware de nivel superior para saber cómo utilizarlo como middleware de nivel superior.
Si bien la biblioteca emitirá un evento de "tiempo de espera" cuando las solicitudes excedan el tiempo de espera determinado, el nodo continuará procesando la solicitud lenta hasta que finalice. Las solicitudes lentas seguirán usando CPU y memoria, incluso si devuelve una respuesta HTTP en la devolución de llamada de tiempo de espera. Para un mejor control sobre la CPU/memoria, es posible que necesite encontrar los eventos que están tardando mucho tiempo (solicitudes HTTP de terceros, E/S de disco, llamadas a bases de datos) y encontrar una manera de cancelarlos y/o cerrar los sockets conectados. .
Devuelve middleware que time
en milisegundos. time
también puede ser una cadena aceptada por el módulo ms. Cuando se agote el tiempo de espera, req
emitirá "timeout"
.
La función timeout
toma un objeto options
opcional que puede contener cualquiera de las siguientes claves:
Controla si este módulo "responderá" reenviando un error. Si es true
, el error de tiempo de espera se pasa a next()
para que pueda personalizar el comportamiento de la respuesta. Este error tiene una propiedad .timeout
y .status == 503
. El valor predeterminado es true
.
Borra el tiempo de espera de la solicitud. El tiempo de espera se elimina por completo y no se activará para esta solicitud en el futuro.
true
si se activa el tiempo de espera; false
en caso contrario.
Debido a la forma en que funciona el procesamiento del middleware, una vez que este módulo pasa la solicitud al siguiente middleware (lo que tiene que hacer para que usted pueda trabajar), ya no puede detener el flujo, por lo que debe tener cuidado de verificar si el La solicitud ha agotado el tiempo de espera antes de continuar actuando según la solicitud.
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