Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

177
Views
Cómo registrar correctamente el objeto de error en javascript

Soy bastante nuevo en el desarrollo web y no he pensado mucho en el error. Pero hoy noté algo, tengo que usar json.stringyfy() para ver el objeto de error completo. Además, la clave del message no se muestra en la declaración 2, pero cuando error.message recibo un mensaje en lugar de undefined . "mensaje" ni siquiera es una clave (compruebe la declaración 4) pero aún registra el error. El mensaje registra un valor ( typeof(error.message) es string ).

 try { //Some error occours } catch (error) { console.log(JSON.stringify(error)) //statement 1 console.error(error) //statement 2 console.log(error.message) //statement 3 console.log(Object.keys(error)) //statement 4 }

declaración 1 registros

 MongoServerError: E11000 duplicate key error collection: trendyApp.Markets index: name_1 dup key: { name: "murat market" } at D:\web projects\trendyApp\server\node_modules\mongodb\lib\operations\insert.js:51:33 at D:\web projects\trendyApp\server\node_modules\mongodb\lib\cmap\connection_pool.js:273:25 at handleOperationResult (D:\web projects\trendyApp\server\node_modules\mongodb\lib\sdam\server.js:363:9) at MessageStream.messageHandler (D:\web projects\trendyApp\server\node_modules\mongodb\lib\cmap\connection.js:474:9) at MessageStream.emit (events.js:375:28) at processIncomingData (D:\web projects\trendyApp\server\node_modules\mongodb\lib\cmap\message_stream.js:108:16) at MessageStream._write (D:\web projects\trendyApp\server\node_modules\mongodb\lib\cmap\message_stream.js:28:9) at writeOrBuffer (internal/streams/writable.js:358:12) at MessageStream.Writable.write (internal/streams/writable.js:303:10) at TLSSocket.ondata (internal/streams/readable.js:726:22) { index: 0, code: 11000, keyPattern: { name: 1 }, keyValue: { name: 'murat market' } }

declaración 2 registros

 {"index":0,"code":11000,"keyPattern":{"name":1},"keyValue":{"name":"murat market"}}

declaración 3 registros

 E11000 duplicate key error collection: trendyApp.Markets index: name_1 dup key: { name: "murat market" }

Vi este comportamiento mientras estaba haciendo una aplicación express y el error lo genera mangosta, pero creo que esto sería común en todo javascript

declaración 4 registros

 [ 'index', 'code', 'keyPattern', 'keyValue' ]
over 4 years ago · Santiago Trujillo
4 answers
Answer question

0

"mensaje" ni siquiera es una clave (compruebe la declaración 4)

Lo es, pero Object.keys está diseñado para enumerar propiedades enumerables y message no es enumerable.

En la especificación de ECMAScript, vemos en la sección sobre el constructor de errores que el constructor crea su mensaje (y otras propiedades) con el procedimiento:

Ejecute CreateNonEnumerableDataPropertyOrThrow ( O , "message", msg ).

Por supuesto, se pueden agregar otras propiedades (personalizadas) a los objetos Error mediante código JavaScript, lo que explica por qué Object.keys() enumera otras propiedades.

En cuanto a la salida de console.log : la implementación de la API de la console tiene mucha libertad sobre cómo mostrar objetos; se pueden encontrar muchas diferencias entre las implementaciones.

Para generar también esas propiedades no enumerables, use

 console.log(Object.getOwnPropertyNames(error))
over 4 years ago · Santiago Trujillo Report

0

Como dijo @trincot, no se muestra porque message es un atributo no enumerable para el constructor de errores, el MongoServerError está anulando el MongoError y en realidad esto está anulando el objeto JS Error, por lo que si necesita saber qué atributos tiene en el error puede consultar los enlaces anteriores para ver qué atributos puede verificar.

Además, si desea obtener todos los atributos (incluidos los no enumerables), puede usar Object.getOwnProperties(error) para ver todos los atributos que tiene el objeto dado.

También puede usar Object.getOwnPropertyDescriptors(error) para saber cuál es el descriptor de cada atributo que ha definido en el objeto dado.

over 4 years ago · Santiago Trujillo Report

0

Lamentablemente, la pila de errores y los campos de mensajes no son enumerables, a continuación se muestra una función de utilidad que extrae todas las propiedades de un objeto de error, incluso los campos personalizados que asigna a los errores:

 const err = new Error('Something bad happened.'); err.metadata = { custom: { field: '1' } }; console.log(errorToPOJO(err)); // {"stack":"Error: Something bad happened.\\n at <anonymous>:1:13","message":"Something bad happened.","metadata":{"custom":{"field":"1"}} function errorToPOJO(error) { const ret = {}; for (const properyName of Object.getOwnPropertyNames(error)) { ret[properyName] = error[properyName]; } return ret; };
over 4 years ago · Santiago Trujillo Report

0

Prueba esto si estás usando api

 console.log(error.message.toString())
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!