timeout
1.9.0
Connect/Express 应用程序框架中的请求超时。
这是一个可通过 npm 注册表获取的 Node.js 模块。使用npm install
命令完成安装:
$ npm install 连接超时
注意不建议将此模块作为“顶级”中间件(即app.use(timeout('5s'))
),除非您采取预防措施来停止自己的中间件处理。有关如何用作顶级中间件的信息,请参阅顶级中间件。
当请求超过给定超时时,库将发出“超时”事件,但节点将继续处理缓慢的请求,直到终止。即使您在超时回调中返回 HTTP 响应,缓慢的请求也将继续使用 CPU 和内存。为了更好地控制 CPU/内存,您可能需要查找花费很长时间的事件(第 3 方 HTTP 请求、磁盘 I/O、数据库调用)并找到取消它们的方法,和/或关闭附加的套接字。
返回在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')varexpress = require('express')var timeout = require('connect-timeout')//使用此顶部的示例-等级;注意每个中间件之后使用haltOnTimedout //;它将在超时时停止请求流var 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,函数(req,res,next){ savePost(req.body, function (err, id) {if (err) return next(err)if (req.timedout) returnres.send('另存为 id ' + id) })})函数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,函数(req,res,next){ savePost(req.body, function (err, id) {if (err) return next(err)if (req.timedout) returnres.send('另存为 id ' + id) })})函数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)