Connect/Express アプリケーション フレームワークでリクエストをタイムアウトします。
これは、npm レジストリから入手できる Node.js モジュールです。インストールはnpm install
コマンドを使用して行われます。
$ npm install connect-timeout
注:独自のミドルウェア処理を停止するための予防措置を講じない限り、このモジュールは「トップレベル」ミドルウェア (つまり、 app.use(timeout('5s'))
) として推奨されません。最上位ミドルウェアとして使用する方法については、「最上位ミドルウェアとして」を参照してください。
リクエストが指定されたタイムアウトを超えるとライブラリは「タイムアウト」イベントを発行しますが、ノードは低速リクエストを終了するまで処理し続けます。タイムアウト コールバックで HTTP 応答を返している場合でも、遅いリクエストは CPU とメモリを使用し続けます。 CPU/メモリをより適切に制御するには、長時間かかっているイベント (サードパーティの 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 )
マサチューセッツ工科大学