O tempo limite de uma solicitação na estrutura do aplicativo Connect/Express.
Este é um módulo Node.js disponível através do registro npm. A instalação é feita usando o comando npm install
:
$ npm install connect-timeout
NOTA Este módulo não é recomendado como um middleware de "nível superior" (ou seja, app.use(timeout('5s'))
), a menos que você tome precauções para interromper o processamento de seu próprio middleware. Veja como middleware de nível superior para saber como usá-lo como middleware de nível superior.
Embora a biblioteca emita um evento de 'tempo limite' quando as solicitações excedem o tempo limite determinado, o nó continuará processando a solicitação lenta até que ela termine. Solicitações lentas continuarão a usar CPU e memória, mesmo se você retornar uma resposta HTTP no retorno de chamada de tempo limite. Para melhor controle sobre CPU/memória, pode ser necessário encontrar os eventos que estão demorando muito (solicitações HTTP de terceiros, E/S de disco, chamadas de banco de dados) e encontrar uma maneira de cancelá-los e/ou fechar os soquetes anexados .
Retorna o middleware que expira em time
. time
também pode ser uma string aceita pelo módulo ms. No tempo limite, req
emitirá "timeout"
.
A função timeout
usa um objeto options
opcional que pode conter qualquer uma das seguintes chaves:
Controla se este módulo irá "responder" na forma de encaminhamento de um erro. Se true
, o erro de tempo limite será passado para next()
para que você possa personalizar o comportamento da resposta. Este erro tem uma propriedade .timeout
e também .status == 503
. O padrão é true
.
Limpa o tempo limite da solicitação. O tempo limite foi completamente removido e não será acionado para esta solicitação no futuro.
true
se o tempo limite for disparado; false
caso contrário.
Devido à forma como o processamento do middleware funciona, uma vez que este módulo passa a solicitação para o próximo middleware (o que ele precisa fazer para que você possa trabalhar), ele não pode mais interromper o fluxo, portanto, você deve tomar cuidado para verificar se o a solicitação atingiu o tempo limite antes de você continuar a agir de acordo com a solicitação.
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