Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

498
Vistas
Manejo de JSON.parse() incorrecto en el nodo de forma segura

Usando node/express: quiero obtener algo de JSON de los encabezados de solicitud, pero quiero hacerlo de manera segura.
Si por alguna razón no es JSON válido, está bien, puede devolver falso o lo que sea y simplemente rechazará la solicitud y continuará. El problema es que arroja un error de sintaxis si no es un JSON válido. Normalmente quiero que explote un error de sintaxis, pero no en este caso.

var boom = JSON.parse(req.headers.myHeader);

¿Raspo la pila y compruebo si hay una mala llamada de análisis de ese módulo en particular, y si es el caso, la ignora? Eso parece un poco loco. Seguramente hay una mejor manera.

EDITAR: Soy consciente de que los bloques try/catch son una forma de manejar este error, pero ¿es la mejor manera en una aplicación de nodo? ¿Esta manera bloqueará el nodo?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

La mejor manera de detectar errores de análisis de JSON no válidos es colocar las llamadas a JSON.parse() en un bloque de try/catch .

Realmente no tiene ninguna otra opción: la implementación integrada genera una excepción en los datos JSON no válidos y la única forma de evitar que esa excepción detenga su aplicación es atraparla. Incluso el uso de una biblioteca de terceros no evitará eso: deben try/catch una llamada JSON.parse() en alguna parte.

La única alternativa es implementar su propio algoritmo de análisis JSON que podría ser más indulgente con las estructuras de datos no válidas, pero que se siente como cavar un agujero de 1 metro cúbico con una pequeña bomba nuclear.

Nota sobre el rendimiento

El motor JavaScript v8 utilizado por Node.js no puede optimizar las funciones que contienen un bloque try/catch .

Actualización: v8 4.5 y superior pueden optimizar try/catch . Para versiones anteriores, consulte a continuación.

Una solución simple es colocar la lógica de análisis seguro en una función separada para que la función principal aún pueda optimizarse:

 function safelyParseJSON (json) { // This function cannot be optimised, it's best to // keep it small! var parsed try { parsed = JSON.parse(json) } catch (e) { // Oh well, but whatever... } return parsed // Could be undefined! } function doAlotOfStuff () { // ... stuff stuff stuff var json = safelyParseJSON(data) // Tadaa, I just got rid of an optimisation killer! }

Si el análisis de JSON se realiza esporádicamente, es posible que esto no tenga un efecto notable en el rendimiento, pero si se usa incorrectamente en una función de uso intensivo, podría generar un aumento drástico en los tiempos de respuesta.

Nota sobre el bloqueo de try/catch

Cabe señalar que cada declaración única del código JavaScript en Node.js se ejecuta solo una a la vez, sin importar si se llama desde la función principal o desde una devolución de llamada o desde un módulo diferente o lo que sea. Como tal, cada declaración bloqueará el proceso. Esto no es necesariamente algo malo: una aplicación bien diseñada pasará la mayor parte de su tiempo esperando un recurso externo (respuesta de la base de datos, comunicación HTTP, operaciones del sistema de archivos, etc.). Por lo tanto, es de gran importancia que el motor v8 pueda optimizar el código JavaScript que se ejecuta con frecuencia para que tarde el menor tiempo posible en este estado bloqueado; consulte la nota sobre el rendimiento.

over 4 years ago · Santiago Trujillo Denunciar

0

Puedes usar try y catch

 function parseMyHeader(){ try { return JSON.parse(req.headers.myHeader); } catch(ex){ return null; } }
over 4 years ago · Santiago Trujillo Denunciar

0

Try/catch estándar es la forma correcta de manejar un error JSON.parse en node.js, como se menciona en las prácticas de producción de nodos para documentos de manejo de errores del sitio web de joyent, que dice:

... el único caso de uso común en el que usaría try/catch es JSON.parse y otras funciones de validación de entrada del usuario.

Lo cual también está de acuerdo con el enlace a nodejitsu que Aleksandr proporcionó en su comentario.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda