اذهب إلى المحتوى
  • 0

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

Bassel Jhr

السؤال

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

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

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

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

Recommended Posts

  • 1

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

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

res.send(...);

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

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

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

  • 0

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

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

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

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

 

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

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...