Тайм-аут запроса в платформе приложений Connect/Express.
Это модуль Node.js, доступный через реестр npm. Установка осуществляется с помощью команды npm install
:
$ npm установить тайм-аут подключения
ПРИМЕЧАНИЕ. Этот модуль не рекомендуется использовать в качестве промежуточного программного обеспечения «верхнего уровня» (т. е. app.use(timeout('5s'))
), если вы не примете меры предосторожности, чтобы остановить обработку вашего собственного промежуточного программного обеспечения. См. промежуточное программное обеспечение верхнего уровня, чтобы узнать, как использовать его в качестве промежуточного программного обеспечения верхнего уровня.
Хотя библиотека выдаст событие «тайм-аут», когда запросы превысят заданный тайм-аут, узел продолжит обработку медленного запроса до тех пор, пока он не завершится. Медленные запросы будут продолжать использовать процессор и память, даже если вы возвращаете HTTP-ответ в обратном вызове тайм-аута. Для лучшего контроля над процессором/памятью вам может потребоваться найти события, которые занимают много времени (сторонние HTTP-запросы, дисковый ввод-вывод, вызовы базы данных) и найти способ их отменить и/или закрыть подключенные сокеты. .
Возвращает промежуточное программное обеспечение, time
ожидания которого истекает в миллисекундах. time
также может быть строкой, принимаемой модулем ms. По тайм-ауту req
выдаст "timeout"
.
Функция timeout
принимает необязательный объект options
, который может содержать любой из следующих ключей:
Определяет, будет ли этот модуль «отвечать» в виде пересылки ошибки. Если true
, ошибка тайм-аута передается в next()
чтобы вы могли настроить поведение ответа. Эта ошибка имеет свойство .timeout
, а также .status == 503
. По умолчанию это значение true
.
Очищает тайм-аут запроса. Тайм-аут полностью удален и не будет срабатывать для этого запроса в будущем.
true
если тайм-аут сработал; false
в противном случае.
Из-за особенностей обработки промежуточного программного обеспечения, как только этот модуль передает запрос следующему промежуточному программному обеспечению (что он должен сделать, чтобы вы могли выполнить работу), он больше не может остановить поток, поэтому вы должны позаботиться о том, чтобы проверить, Время ожидания запроса истекло, прежде чем вы продолжите действовать по запросу.
var bodyParser = require('body-parser')var cookieParser = require('cookie-parser')var express = require('express')var timeout = require('connect-timeout')// пример использования этого топ- уровень; обратите внимание на использование stopOnTimedout// после каждого промежуточного программного обеспечения; он остановит поток запросов на timeoutvar app = express()app.use(timeout('5s'))app.use(bodyParser())app.use(haltOnTimedout)app.use(cookieParser())app.use (haltOnTimedout)// Добавьте сюда свои маршруты и т. д. functionhaltOnTimedout (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) returnres.send('сохранено как id' + id) })})function stopOnTimedout (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) returnres.send('сохранено как id' + id) })})function stopOnTimedout (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)