คำตอบอื่น ๆ นั้นบ้ามาก ๆ ที่คุณสามารถอ่านได้ที่เอกสารของ Node ที่http://nodejs.org/docs/latest/api/process.html#process_event_uncaughtexception
หากมีคนใช้คำตอบที่ระบุไว้อื่น ๆ อ่าน Node Docs:
  โปรดทราบว่าuncaughtExceptionเป็นกลไกที่หยาบมากสำหรับการจัดการข้อยกเว้นและอาจถูกลบออกในอนาคต
PM2
แรกของทั้งหมดที่ผมอยากจะแนะนำการติดตั้งสำหรับPM2 Node.jsPM2 นั้นยอดเยี่ยมมากในการจัดการความผิดพลาดและการตรวจสอบแอพ Node รวมถึงการปรับสมดุลโหลด PM2 เริ่มต้นแอป Node ทันทีเมื่อใดก็ตามที่เกิดปัญหาหยุดด้วยเหตุผลใดก็ตามหรือแม้กระทั่งเมื่อเซิร์ฟเวอร์รีสตาร์ท ดังนั้นหากสักวันแม้หลังจากจัดการรหัสของเราแล้วแอปขัดข้อง PM2 สามารถเริ่มต้นใหม่ได้ทันที สำหรับข้อมูลเพิ่มเติมการติดตั้งและเรียกใช้ PM2
ตอนนี้กลับมาที่โซลูชันของเราเพื่อป้องกันไม่ให้แอปหยุดทำงาน
ดังนั้นหลังจากผ่านไปในที่สุดฉันก็พบกับสิ่งที่ Node แนะนำ:
  อย่าใช้uncaughtExceptionใช้domainsกับclusterแทน หากคุณใช้uncaughtExceptionให้รีสตาร์ทแอปพลิเคชันของคุณหลังจากข้อยกเว้นที่ไม่สามารถจัดการได้ทุกข้อ
DOMAINกับคลัสเตอร์
สิ่งที่เราทำจริง ๆ คือส่งการตอบกลับข้อผิดพลาดไปยังคำขอที่ทริกเกอร์ข้อผิดพลาดในขณะที่ปล่อยให้คนอื่น ๆ เสร็จในเวลาปกติและหยุดฟังคำร้องขอใหม่ในคนงานนั้น
ด้วยวิธีนี้การใช้โดเมนจะไปพร้อมกันกับโมดูลคลัสเตอร์เนื่องจากกระบวนการหลักสามารถแยกผู้ปฏิบัติงานใหม่เมื่อผู้ปฏิบัติงานพบข้อผิดพลาด ดูรหัสด้านล่างเพื่อทำความเข้าใจสิ่งที่ฉันหมายถึง
ด้วยการใช้Domainและความยืดหยุ่นในการแยกโปรแกรมของเราออกเป็นกระบวนการทำงานหลายอย่างโดยใช้Clusterเราสามารถตอบสนองได้อย่างเหมาะสมและจัดการข้อผิดพลาดด้วยความปลอดภัยที่มากขึ้น
var cluster = require('cluster');
var PORT = +process.env.PORT || 1337;
if(cluster.isMaster) 
{
   cluster.fork();
   cluster.fork();
   cluster.on('disconnect', function(worker) 
   {
       console.error('disconnect!');
       cluster.fork();
   });
} 
else 
{
    var domain = require('domain');
    var server = require('http').createServer(function(req, res) 
    {
        var d = domain.create();
        d.on('error', function(er) 
        {
            //something unexpected occurred
            console.error('error', er.stack);
            try 
            {
               //make sure we close down within 30 seconds
               var killtimer = setTimeout(function() 
               {
                   process.exit(1);
               }, 30000);
               // But don't keep the process open just for that!
               killtimer.unref();
               //stop taking new requests.
               server.close();
               //Let the master know we're dead.  This will trigger a
               //'disconnect' in the cluster master, and then it will fork
               //a new worker.
               cluster.worker.disconnect();
               //send an error to the request that triggered the problem
               res.statusCode = 500;
               res.setHeader('content-type', 'text/plain');
               res.end('Oops, there was a problem!\n');
           } 
           catch (er2) 
           {
              //oh well, not much we can do at this point.
              console.error('Error sending 500!', er2.stack);
           }
       });
    //Because req and res were created before this domain existed,
    //we need to explicitly add them.
    d.add(req);
    d.add(res);
    //Now run the handler function in the domain.
    d.run(function() 
    {
        //You'd put your fancy application logic here.
        handleRequest(req, res);
    });
  });
  server.listen(PORT);
} 
แม้ว่าDomainจะอยู่ระหว่างการคัดค้านและจะถูกลบออกเนื่องจากการแทนที่ใหม่มาตามที่ระบุในเอกสารของโหนด
  โมดูลนี้อยู่ระหว่างการคัดค้าน เมื่อ API การแทนที่ได้รับการสรุปโมดูลนี้จะถูกคัดค้านอย่างสมบูรณ์ ผู้ใช้ที่ต้องมีฟังก์ชั่นที่โดเมนจัดเตรียมไว้อาจใช้งานได้ในขณะนั้น แต่คาดว่าจะต้องย้ายไปใช้โซลูชันอื่นในอนาคต
แต่จนกว่าจะไม่มีการแทนที่ใหม่ Domain with Cluster เป็นทางออกที่ดีเพียงอย่างเดียวที่ Node Documentation แนะนำ
เพื่อความเข้าใจในเชิงลึกDomainและClusterอ่าน
https://nodejs.org/api/domain.html#domain_domain (Stability: 0 - Deprecated)
https://nodejs.org/api/cluster.html
ขอขอบคุณ @Stanley Luo ที่แบ่งปันคำอธิบายเชิงลึกที่ยอดเยี่ยมเกี่ยวกับคลัสเตอร์และโดเมน
คลัสเตอร์และโดเมน