practicas node buenas javascript error-handling

javascript - node - buenas practicas jquery



¿Cuáles son las mejores prácticas para el manejo de errores de JavaScript? (4)

Además de las otras respuestas: una cosa importante es utilizar los datos de contexto disponibles en los objetos de error de JavaScript y en los parámetros de la función window.onerror .

Cosas como stacktrace (errorObject.stack), el nombre de archivo, el número de línea y el número de columna. Tenga en cuenta que cada navegador tiene algunas diferencias ... haga su mejor esfuerzo para obtener buenos errores.

Incluso puede haber problemas con el objeto de la consola en sí . Utilizo una función window.onerror personalizada inspirada por esta y una función especial para rastrear cualquier objeto de error estándar dado inspirado por este código .

Otro buen punto es incluir la versión de su aplicación web en algún lugar cerca de stacktrace (para copiar y pegar de forma rápida y segura). También puede mostrar errores de forma más agresiva (alerta ...) en el modo de desarrollo ya que los desarrolladores no supervisarán constantemente la consola del navegador y es posible que no vean algunos de los problemas.

También use evitar usar throw ''My message'' , use throw new Error(''My message'') , incluso puede tener errores personalizados, lea este artículo .

Siempre agregue algún contexto a los errores (la versión, el id del objeto, algún mensaje personalizado, ...) y también asegúrese de hacer una distinción entre los errores externos (algunos datos externos o la fuerza hizo que su sistema falle) y errores internos / afirmaciones (su propio sistema no funciona bien), lea sobre '' Diseño por contrato ''.

Aquí hay una guide .

También piense en usar el manejo general de errores como interceptores de sus libs y frameworks:

Estoy buscando comenzar a hacer mi JavaScript un poco más a prueba de errores, y estoy encontrando mucha documentación sobre el uso de try , catch , finally y throw , pero no encuentro un montón de consejos de expertos sobre cuándo y dónde lanzar errores

  • ¿Debería envolverse cada pieza de código en un try / catch?
  • ¿Hay más consejos como este sobre en qué punto se deben atrapar los errores?
  • ¿Hay desventajas al generar errores en lugar de que el código falle silenciosamente en la producción?
  • Esto se ha abordado en SO en cuanto a las implementaciones, pero ¿los errores JS de registro de servidores son una estrategia efectiva?
  • ¿Algo más que deba saber sobre los errores de reventado en mi aplicación?

También estoy completamente preparado para escuchar libros que tienen grandes capítulos o explicaciones detalladas sobre el manejo de errores. El JavaScript elocuente toca el asunto, pero no es muy prescriptivo o obstinado sobre el tema.

¡Gracias por cualquier consejo que puedas dar!


IHMO, debe usar el manejo de errores en javascript como lo hace en varios otros idiomas (AFAIK: Python, Java).

Para una mejor legibilidad (y probablemente un mejor rendimiento, aunque no estoy seguro de que tenga un gran impacto), debe usar el bloque try / catch sobre todo en los siguientes casos:

  • La parte del código que desea envolver es una parte clave de todo el algoritmo . Si falla, podría:

    • crear errores en la siguiente parte de los códigos (por ejemplo, porque falta una var ...)
    • hacer que la página no se vea como se esperaba (impacto en el contenido o css)
    • hacer que los resultados parezcan extraños para el usuario (impacto en el comportamiento del código)
  • Sabes que el código que estás escribiendo no es compatible con todos los navegadores

  • Planeó que el código puede fallar (porque no hay otra manera de verificar que debería funcionar si ... entonces ... bloques)
  • Y también cuando quiere depurar sin molestar al usuario final

Eventualmente, los expertos en JavaScript pueden tener otros elementos para dar.

mis 2 centavos a la caja,

Saludos,

Max


Nicholas Zakas de Yahoo! fame hizo una charla sobre Enterprise Error Handling ( http://www.slideshare.net/nzakas/enterprise-javascript-error-handling-presentation ) en Ajax Experience 2008, en la que propuso algo como esto:

function log(sev,msg) { var img = new Image(); img.src = "log.php?sev=" + encodeURIComponent(sev) + "&msg=" + encodeURIComponent(msg); } // usage log(1, "Something bad happened.") // Auto-log uncaught JS errors window.onerror = function(msg, url, line) { log(1, msg); return true; }

Un año después, Nicholas Zakas publicó una actualización en su blog que incluía un patrón inteligente para inyectar el código de manejo de errores automáticamente en su entorno de producción (usando programación orientada a aspectos).

Cuando empiece a registrar llamadas window.error, notará dos cosas:

  1. Si su sitio es bastante complejo, va a registrar muchos errores
  2. Verás un montón de mensajes inútiles de "window.error in undefined: 0"

Reducir el torrente de entradas de registro es tan simple como probar la gravedad y / o un número aleatorio antes de iniciar sesión en el servidor:

function log(sev,msg) { if (Math.random() > 0.1) return; // only log some errors var img = new Image(); img.src = "log.php?sev=" + encodeURIComponent(sev) + "&msg=" + encodeURIComponent(msg); }

La gestión de los inútiles errores "window.error in undefined: 0" depende de la arquitectura de su sitio, pero puede intentar identificar todas las llamadas Ajax y lanzar una excepción cuando algo falla (posiblemente devolviendo un seguimiento de pila usando stacktrace.js ).


Un juego de diapositivas inmensamente interesante sobre Enterprise JavaScript Error Handling se puede encontrar en http://www.devhands.com/2008/10/javascript-error-handling-and-general-best-practices/

En resumen, resume:

  1. Suponga que su código fallará
  2. Registrar errores en el servidor
  3. Usted, no el navegador, maneja los errores
  4. Identificar dónde pueden ocurrir errores
  5. Lanza tus propios errores
  6. Distinguir los errores fatales contra los no fatales
  7. Proporcionar un modo de depuración

Las diapositivas entran en mucho más detalle y lo más probable es que te den una dirección.

ACTUALIZAR

La presentación mencionada anteriormente se puede encontrar aquí: http://www.slideshare.net/nzakas/enterprise-javascript-error-handling-presentation