Batas waktu permintaan dalam kerangka aplikasi Connect/Express.
Ini adalah modul Node.js yang tersedia melalui registri npm. Instalasi dilakukan dengan menggunakan perintah npm install
:
$ npm install connect-timeout
CATATAN Modul ini tidak direkomendasikan sebagai middleware "tingkat atas" (yaitu app.use(timeout('5s'))
) kecuali Anda melakukan tindakan pencegahan untuk menghentikan pemrosesan middleware Anda sendiri. Lihat sebagai middleware tingkat atas untuk mengetahui cara menggunakannya sebagai middleware tingkat atas.
Meskipun perpustakaan akan mengeluarkan peristiwa 'batas waktu' ketika permintaan melebihi batas waktu yang diberikan, node akan terus memproses permintaan lambat hingga permintaan tersebut berakhir. Permintaan yang lambat akan terus menggunakan CPU dan memori, meskipun Anda mengembalikan respons HTTP dalam panggilan balik batas waktu. Untuk kontrol yang lebih baik atas CPU/memori, Anda mungkin perlu menemukan peristiwa yang memakan waktu lama (permintaan HTTP pihak ketiga, I/O disk, panggilan basis data) dan menemukan cara untuk membatalkannya, dan/atau menutup soket yang terpasang .
Mengembalikan middleware yang waktunya habis dalam time
milidetik. time
juga bisa berupa string yang diterima oleh modul ms. Saat batas waktu habis, req
akan mengeluarkan "timeout"
.
Fungsi timeout
mengambil objek options
opsional yang mungkin berisi salah satu kunci berikut:
Mengontrol apakah modul ini akan "merespons" berupa penerusan kesalahan. Jika true
, kesalahan batas waktu diteruskan ke next()
sehingga Anda dapat menyesuaikan perilaku respons. Kesalahan ini memiliki properti .timeout
dan juga .status == 503
. Defaultnya adalah true
.
Menghapus batas waktu pada permintaan. Batas waktu telah dihapus sepenuhnya dan tidak akan diaktifkan untuk permintaan ini di masa mendatang.
true
jika batas waktu diaktifkan; false
sebaliknya.
Karena cara kerja pemrosesan middleware, setelah modul ini meneruskan permintaan ke middleware berikutnya (yang harus dilakukan agar Anda dapat melakukan pekerjaannya), modul ini tidak lagi dapat menghentikan alirannya, jadi Anda harus berhati-hati dalam memeriksa apakah permintaan memiliki batas waktu sebelum Anda melanjutkan bertindak atas permintaan tersebut.
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 )
MIT