Cómo mejorar la estabilidad y robustez de los programas nodejs
Me tomé un tiempo para pensar en este tema en los últimos dos días. Creo que la primera función de nuestro programa debería ser independiente. Si una función es anormal, no debería afectar el funcionamiento normal de otra. Todo el programa debería fallar. En segundo lugar, incluso si el programa falla, deberíamos tener un programa que se inicie automáticamente. Además, debemos registrar registros para facilitarnos el seguimiento del problema. Creo que la estabilidad de nodejs se puede mejorar principalmente desde los siguientes aspectos:
1) Mantener una buena estructura de código:
Sabemos que el nodo es io de un solo subproceso y sin bloqueo. Y las devoluciones de llamada asíncronas se utilizan para manejar procesos posteriores. Si hay demasiados niveles anidados, inevitablemente causará confusión en la estructura lógica del código y no favorecerá el mantenimiento y las actualizaciones. , se puede utilizar para aclarar la lógica de nuestro código.
2) Utilice Process.on('uncaughtException', function(err){...});
3) Utilice try~catch para detectar excepciones:
Esto solo puede resolver parte del problema, no todo. Como se mencionó anteriormente, el nodo es io de un solo subproceso y sin bloqueo. Y el valor predeterminado es Es asíncrono y los procesos posteriores se procesan mediante devoluciones de llamada. try~catch no puede capturar el error en la devolución de llamada. ¿Cómo capturar el error en la devolución de llamada? >4) Uso El módulo de dominio maneja excepciones del programa
Veamos primero la explicación del dominio: dominio es una subclase de la clase EventEmitter. Escuche su evento de error para manejar los errores que captura. Proporciona una manera de manejar múltiples operaciones de IO diferentes como un solo grupo. Si algún desencadenante de evento o devolución de llamada registrado en el dominio desencadena un evento de "error" o arroja un error, se notificará al objeto del dominio. En lugar de perder directamente el contexto de este error del controlador `process.on('uncaughtException')', no hará que el programa se cierre inmediatamente debido a este error acompañado de un código de error.