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 instalar tempo limite de conexão
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. Consulte 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')// exemplo de uso deste top- nível; observe o uso de haltOnTimedout// após cada middleware; isso interromperá o fluxo de solicitação em um timeoutvar app = express()app.use(timeout('5s'))app.use(bodyParser())app.use(haltOnTimedout)app.use(cookieParser())app.use (haltOnTimedout)// Adicione suas rotas aqui, etc.function haltOnTimedout (req, res, next) { if (!req.timedout) next()}app.listen(3000)
var expresso = 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, próximo) { savePost(req.body, function (err, id) {if (err) return next(err)if (req.timedout) returnres.send('salvo como 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, próximo) { savePost(req.body, function (err, id) {if (err) return next(err)if (req.timedout) returnres.send('salvo como 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)