انقضاء مهلة الطلب في إطار عمل تطبيق Connect/Express.
هذه وحدة Node.js متاحة من خلال سجل npm. يتم التثبيت باستخدام أمر npm install
:
$ npm تثبيت مهلة الاتصال
ملاحظة: لا يُنصح باستخدام هذه الوحدة باعتبارها برنامجًا وسيطًا "عالي المستوى" (على سبيل المثال، app.use(timeout('5s'))
) إلا إذا اتخذت الاحتياطات اللازمة لإيقاف معالجة البرامج الوسيطة الخاصة بك. راجع البرامج الوسيطة عالية المستوى لمعرفة كيفية استخدامها كبرامج وسيطة عالية المستوى.
بينما ستصدر المكتبة حدث "مهلة" عندما تتجاوز الطلبات المهلة المحددة، ستستمر العقدة في معالجة الطلب البطيء حتى تنتهي. ستستمر الطلبات البطيئة في استخدام وحدة المعالجة المركزية والذاكرة، حتى إذا كنت تقوم بإرجاع استجابة HTTP في رد اتصال المهلة. للتحكم بشكل أفضل في وحدة المعالجة المركزية/الذاكرة، قد تحتاج إلى العثور على الأحداث التي تستغرق وقتًا طويلاً (طلبات HTTP لجهة خارجية، وإدخال/إخراج القرص، واستدعاءات قاعدة البيانات) وإيجاد طريقة لإلغائها و/أو إغلاق المقابس المرفقة .
إرجاع البرامج الوسيطة التي تنتهي مهلتها 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')// مثال لاستخدام هذا الجزء العلوي- مستوى؛ لاحظ استخدام stopOnTimedout// بعد كل برنامج وسيط؛ سيوقف تدفق الطلب في مهلة زمنيةvar app = Express()app.use(timeout('5s'))app.use(bodyParser())app.use(haltOnTimedout)app.use(cookieParser())app.use (haltOnTimedout)// أضف مساراتك هنا، وما إلى ذلك.functionhaltOnTimedout (req, res, next) { إذا (!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()، stopOnTimedout، الوظيفة (req، res، next) { savePost(req.body, function (err, id) {if (err) return next(err)if (req.timedout) returnres.send('saved as id' + id) })}) الدالة stopOnTimedout (req, res, next) { if (!req.timedout) next()} الدالة savePost (post, cb) { setTimeout(function () {cb(null, ((Math.random() * 40000) >>> 0)) }, (Math.random() * 7000) >>> 0)}app.listen(3000)
var bodyParser = require('body-parser')varconnect = require('connect')var timeout = require('connect-timeout')var app =connect()app.use('/save', timeout('5s) ')، bodyParser.json()، stopOnTimedout، الوظيفة (req، res، next) { savePost(req.body, function (err, id) {if (err) return next(err)if (req.timedout) returnres.send('saved as id' + id) })}) الدالة stopOnTimedout (req, res, next) { if (!req.timedout) next()} الدالة savePost (post, cb) { setTimeout(function () {cb(null, ((Math.random() * 40000) >>> 0)) }, (Math.random() * 7000) >>> 0)}app.listen(3000)