Tamim Fahed نشر 23 يونيو 2021 أرسل تقرير نشر 23 يونيو 2021 أرغب بتنفيذ أوامر معينة مثل الطباعة عندما يحدث إنهاء أو إيقاف تشغيل لخادم الويب node.js، وقمت باستخدام الدالة process كالتالي: process.on('exit', function (){ console.log('the server will shut down..'); }); ولكن عندما أقوم بالضغط على crtl-c في لوحة المفاتيح لإيقاف الخادم، أو حتى عندما يحدث أي خطأ Exception يوقف عمله، لا تظهر هذه الرسالة. 1 اقتباس
0 أحمد حبنكة نشر 23 يونيو 2021 أرسل تقرير نشر 23 يونيو 2021 السبب في ذلك أن الحدث exit هو حدث اﻹنهاء العادي أي من دون أخطاء ومن دون event loops ومن دون kill من أجل التقاط جميع حالات اﻹغلاق بما فيها Ctrl + C وExceptions وغير ذلك نكتب الكود التالي: // attach user callback to the process event emitter // if no callback, it will still exit gracefully on Ctrl-C callback = // some function; // do app specific cleaning before exiting process.on('exit', callback); // catch ctrl+c event and exit normally process.on('SIGINT', function () { console.log('Ctrl-C...'); process.exit(2); }); //catch uncaught exceptions, trace, then exit normally process.on('uncaughtException', function(e) { console.log('Uncaught Exception...'); console.log(e.stack); process.exit(99); }); الكود السابق ينفذ تابع callback عند اﻹغلاق النظامي ويطبع Ctrl-C... ويغلق الـprocess عند الضغط على Ctrl+C وأخيراً في حال حدوث exception يطبع الـstacktrace ويغلق process، طبعاً أنت يمكنك إسناد نفس التابع لجميع اﻷحداث، المهم هو الفكرة. اقتباس
0 Wael Aljamal نشر 23 يونيو 2021 أرسل تقرير نشر 23 يونيو 2021 لايحدث استجابة عند نقر ctrl + c بسبب أن الحدث الخاص بها مختلف وليس exit بل هو SIGINT: //catches ctrl+c event process.on('SIGINT', exitHandler.bind(null, {exit:true})); يمكن أيضا استخادم الأحداث التالية: // catches "kill pid" قتل العملية // nodemon restart SIGUSR1 SIGUSR2 // حدوث استثناء uncaughtException يمكن اختصار جميع الحالات: [`exit`, `SIGINT`, `SIGUSR1`, `SIGUSR2`, `uncaughtException`, `SIGTERM`].forEach((eventType) => { process.on(eventType, cleanUpServer.bind(null, eventType)); }) اقتباس
السؤال
Tamim Fahed
أرغب بتنفيذ أوامر معينة مثل الطباعة عندما يحدث إنهاء أو إيقاف تشغيل لخادم الويب node.js، وقمت باستخدام الدالة process كالتالي:
process.on('exit', function (){ console.log('the server will shut down..'); });
ولكن عندما أقوم بالضغط على crtl-c في لوحة المفاتيح لإيقاف الخادم، أو حتى عندما يحدث أي خطأ Exception يوقف عمله، لا تظهر هذه الرسالة.
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.