暂停
1.9.0
Connect/Express 应用程序框架中的请求超时。
这是一个可通过 npm 注册表获取的 Node.js 模块。使用npm install
命令完成安装:
$ npm install connect-timeout
注意不建议将此模块作为“顶级”中间件(即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' )
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 )
麻省理工学院