หมดเวลาการร้องขอในกรอบงานแอปพลิเคชัน Connect/Express
นี่คือโมดูล Node.js ที่พร้อมใช้งานผ่านรีจิสทรี npm การติดตั้งเสร็จสิ้นโดยใช้คำสั่ง npm install
:
$ npm install connect-timeout
หมายเหตุ ไม่แนะนำให้ใช้โมดูลนี้เป็นมิดเดิลแวร์ "ระดับบนสุด" (เช่น app.use(timeout('5s'))
) เว้นแต่คุณจะใช้ความระมัดระวังในการหยุดการประมวลผลมิดเดิลแวร์ของคุณเอง ดูเป็นมิดเดิลแวร์ระดับบนสุดสำหรับวิธีใช้เป็นมิดเดิลแวร์ระดับบนสุด
แม้ว่าไลบรารีจะปล่อยเหตุการณ์ 'หมดเวลา' เมื่อคำขอเกินเวลาที่กำหนด โหนดจะดำเนินการประมวลผลคำขอที่ช้าต่อไปจนกว่าจะยุติ คำขอที่ช้าจะยังคงใช้ CPU และหน่วยความจำ แม้ว่าคุณจะส่งคืนการตอบสนอง HTTP ในการโทรกลับแบบหมดเวลาก็ตาม เพื่อการควบคุม 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 )
เอ็มไอที