• 0

استفسار عن إمكانية تنفيذ التعليمات بعد إغلاق الاتصال في node.js

باستخدام إطار العمل express في node.js قمت بوضع بعض التعليمات بعد التابع res.send كالتالي:

res.send(200, somedata);
console.log('hello world!');

ومع ذلك تم تنفيذها، فكما قرأت بالتوثيق الرسمي بأن التابع res.send لا يقوم بعملية إعادة return والخروج من التابع الأساسي وإنما فقط يقوم بإغلاق اتصال http مع طرف المستخدم. ولكن لماذا يتم تنفيذ بقية العمليات حتى بعد إغلاق الاتصال مع طرف المستخدم وليس كبقية أطر العمل؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1

إن res.send بالفعل تقوم بإرسال الرد response وإغلاق الاتصال HTTP ولكن لا تقوم بإجراء أي شيء إضافي إلى الكود الذي يتبعها، حيث يمكنك إجراء أي عمليات برمجية بعد هذا السطر دون أي تأثير.

ولكن لن تتمكّن من إجراء أي عمليات على الغرض res لأن الطلب تم إنهائه وإرسال الرد إلى المستخدم وبالتالي لا يمكنك إضافة أي بيانات أو معالجتها بعد إرسال هذا الرد، كما لا يمكنك إضافة أي ترويسة أو خصائص إضافية للطلب، مثلاً:

res.send(...);

res.write('test'); // سيعطي خطأ

وإن هذا النمط مختلف عن بقية أطر العمل مثل PHP و ASP.NET وغيرها من أطر العمل التي تقوم بتعيين مسلك thread لكل طلب HTTP وتقوم بإنهاء هذا المسلك عند انتهاء الطلب. فمثلاً في حال قمت باستدعاء التابع Response.End في ASP سيقوم بإيقاف المسلك الموافق لهذا الطلب وبالتالي سيتوقف الكود البرمجي عن المتابعة. أما في node.js فلا يوجد مسلك محدد لكل طلب وبالتالي لن يتم إيقاف تنفيذ الكود الذي يتبع إرسال الطلب وإنهائه أو أي عمليات قد تجري من بعده طالما ليست متعلّقة بالعرض req و res.

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

هذه طريقة بسيطة لإيقاف التنفيذ وإرسال استجابة في نفس الوقت من خلال:

return res.send('500', 'Error message here');

ويتيح لك هذا استخدام جمل if القصيرة للتعامل مع أخطاء مثلاً:

if (err) {
    return res.send('500', 'Error message here');
}

 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن