كيفية الخروج في Node.js




(10)

ما هو الأمر المستخدم للخروج؟ (أي إنهاء عملية node.js)


إذا كنت ترغب في الخروج من تطبيق العقدة شبيبة الكتابة

process.exit(1)

في شفرتك


إذا كنت في محطة يونكس أو سطر أوامر Windows وترغب في الخروج من عقدة REPL ، فإما أن ...

  • اضغط على Ctrl + C مرتين ، أو
  • اكتب .exit واضغط على Enter ، أو
  • اضغط Ctrl + D في بداية السطر (Unix فقط)

لدي تطبيق أردت أن:

  1. إرسال بريد إلكتروني إلى المستخدم
  2. الخروج برمز خطأ

واضطررت إلى ربط process.exit(code) exit حدث exit ، وإلا فلن يتم إرسال البريد نظرًا لأن استدعاء process.exit(code) يقتل الأحداث غير المتزامنة مباشرة.

#!/usr/bin/nodejs
var mailer = require('nodemailer');
var transport = mailer.createTransport();
mail = {
  to: 'Dave Bowman',
  from: 'HAL 9000',
  subject: 'Sorry Dave',
  html: 'Im sorry, Dave. Im afraid I cant do <B>THAT</B>.'
}
transport.sendMail(mail);
//process.exit(1);
process.on('exit', function() { process.exit(1); });

للخروج

let exitCode = 1;
process.exit(exitCode)

رموز الخروج مفيدة

1 - Catchall for general errors
2 - Misuse of shell builtins (according to Bash documentation)
126 - Command invoked cannot execute
127 - “command not found”
128 - Invalid argument to exit
128+n - Fatal error signal “n”
130 - Script terminated by Control-C
255\* - Exit status out of range

من الكود يمكنك استخدام process.exit([errorcode]) حيث يكون [errorcode] عبارة عن عدد صحيح اختياري ( 0 هو القيمة الافتراضية التي تشير إلى النجاح).

إذا كنت تستخدم " قراءة Eval Print Loop" (REPL) ، فيمكنك استخدام Ctrl + D ، أو كتابة .exit

بدلاً من ذلك ، في Windows أو Linux ، يمكنك استخدام Ctrl + C و Ctrl + C

على نظام التشغيل Mac ، يكون الأمر Ctrl + Z ، Ctrl + Z


من سطر الأوامر ، .exit هو ما تريده:

$ node
> .exit
$

تم توثيقه في مستندات REPL . REPL (Read-Eval-Print-Loop) هو ما يسمى سطر أوامر عقدة.

من برنامج عادي ، استخدم process.exit([code]) .


وكما أوضحDominic ، فإن exit غير exit هو ممارسة أفضل بدلاً من استدعاء process.exit ([code]) :
process.exitCode = 1; throw new Error("my module xx condition failed");


يعتمد ذلك على سبب رغبتك في الخروج من عملية node.js ، ولكن في أي حالة من الحالات ، يكون .exit process.exit() هو الخيار الأخير الذي يجب أخذه في الاعتبار . اقتباس من الوثائق:

من المهم ملاحظة أن استدعاء process.exit() سيجبر العملية على الخروج بأسرع وقت ممكن حتى إذا كانت هناك عمليات غير متزامنة معلقة لم تكتمل بعد ، بما في ذلك عمليات الإدخال / الإخراج إلى process.stdout و process.stderr .

في معظم الحالات ، ليس من الضروري في الواقع استدعاء process.exit() بشكل صريح. ستخرج عملية Node.js من تلقاء نفسها إذا لم يكن هناك عمل إضافي معلق في حلقة الحدث. يمكن تعيين الخاصية process.exitCode لإخبار العملية التي إنهاء التعليمات البرمجية لاستخدامها عند إنهاء العملية بأمان.

دعونا نغطي الأسباب المحتملة لعلك قد تكون على استعداد للخروج من عملية node.js ولماذا يجب عليك تجنب process.exit() :

الحالة 1 - اكتمل التنفيذ (نص سطر الأوامر)

إذا كان البرنامج النصي قد وصل إلى نهايته ولم يخرج مترجم العقدة ، فإنه يشير إلى أن بعض عمليات التزامن لا تزال معلقة. من الخطأ فرض إنهاء العملية باستخدام process.exit() في هذه المرحلة. من الأفضل محاولة فهم ما يحمل النص من الخروج بالطريقة المتوقعة . وعندما تقوم بتسوية هذا ، يمكنك استخدام process.exitCode لإرجاع أي نتيجة لعملية الاستدعاء.

الحالة 2 - الإنهاء بسبب الإشارة الخارجية (SIGINT / SIGTERM / أخرى)

على سبيل المثال ، إذا كنت على استعداد لإغلاق تطبيق صريح بأمان. على عكس نص سطر الأوامر ، يستمر تشغيل التطبيق السريع بشكل لا نهائي ، في انتظار طلبات جديدة. process.exit() خيارًا سيئًا هنا لأنه سيقطع جميع الطلبات التي هي في خط أنابيب. وبعضهم قد يكون غير عديم الفائدة (UPDATE ، DELETE). لن يعرف العميل مطلقًا ما إذا كانت هذه الطلبات قد اكتملت أم لا على جانب الخادم وقد يكون سبب عدم تناسق البيانات بين العميل والخادم. الحل الجيد الوحيد هو إخبار ملقم http بالتوقف عن قبول الطلبات الجديدة وانتظر حتى تنتهي المعلقة مع server.close() :

var express = require('express');
var app = express();
var server = app.listen(80);

process.on( 'SIGTERM', function () {
   server.close(function () {
     console.log("Finished all requests");
   });
});

إذا لم يتم الخروج بعد - راجع الحالة 1.

الحالة 3 - خطأ داخلي

من الأفضل دائمًا throw خطأ ، ستحصل على تتبع مكدس ورسالة خطأ منسقة بشكل جيد. يمكن أن تحدد المستويات العليا من التعليمات البرمجية دائمًا ما إذا كان يمكنها التعامل مع الخطأ ( catch ) أو تركه يؤدي إلى تعطل العملية. على الجانب الآخر ، سيؤدي process.exit(1) إلى إنهاء العملية في صمت ولن تكون هناك فرصة للتعافي من هذا. قد تكون "الفائدة" الوحيدة من process.exit() ، يمكنك التأكد من إنهاء هذه العملية.


سطر الأوامر

اضغط على CTRL + C مرتين

أو

اكتب .exit واضغط على enter

ملف البرنامج النصي

process.exit(code)

استدعاء طريقة exit كائن process العالمي:

process.exit()

من المستندات:

process.exit ([كود])

انهاء العملية مع code المحدد. إذا تم حذفه ، فإن الخروج يستخدم رمز "النجاح" 0 .

للخروج برمز "فشل":

process.exit(1);

يجب أن ترى shell تنفيذ العقدة رمز الإنهاء كـ 1.







node.js