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 instal batas waktu koneksi
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 waktu habisnya 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
. Ini 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 untuk 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')// contoh penggunaan top- tingkat; perhatikan penggunaan haltOnTimedout// setelah setiap middleware; itu akan menghentikan aliran permintaan pada timeoutvar app = express()app.use(timeout('5s'))app.use(bodyParser())app.use(haltOnTimedout)app.use(cookieParser())app.use (haltOnTimedout)// Tambahkan rute Anda di sini, dll.function haltOnTimedout (req, res, next) { if (!req.timedout) next()}app.listen(3000)
var express = memerlukan('express')var bodyParser = memerlukan('body-parser')var timeout = memerlukan('connect-timeout')var app = express()app.post('/save', timeout('5s '), bodyParser.json(), haltOnTimedout, fungsi (req, res, next) { savePost(req.body, function (err, id) {if (err) return next(err)if (req.timedout) returnres.send('disimpan sebagai id ' + id) })})fungsi haltOnTimedout (permintaan, res, selanjutnya) { if (!req.timedout) next()}fungsi savePost (posting, cb) { setTimeout(fungsi () {cb(null, ((Math.random() * 40000) >>> 0)) }, (Matematika.acak() * 7000) >>> 0)}app.listen(3000)
var bodyParser = memerlukan('body-parser')var connect = memerlukan('connect')var timeout = memerlukan('connect-timeout')var app = connect()app.use('/save', timeout('5s '), bodyParser.json(), haltOnTimedout, fungsi (req, res, next) { savePost(req.body, function (err, id) {if (err) return next(err)if (req.timedout) returnres.send('disimpan sebagai id ' + id) })})fungsi haltOnTimedout (permintaan, res, selanjutnya) { if (!req.timedout) next()}fungsi savePost (posting, cb) { setTimeout(fungsi () {cb(null, ((Math.random() * 40000) >>> 0)) }, (Matematika.acak() * 7000) >>> 0)}app.listen(3000)