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)// 在此新增您的路線等。 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)