概要
Error
オブジェクト(のインスタンス)を JSON.stringify
すると、空オブジェクトの文字列になる。
JSON.stringify(new Error('this is erorr')) // '{}'
ログ監視・エラー監視などでありがち。
原因
空オブジェクトの文字列になってしまう理由としては、 JSON.stringify
はオブジェクトの enumerable
なプロパティのみシリアライズする。
そして Error
オブジェクトは enumertable なプロパティを持たない。
参考: プロパティの列挙可能性と所有権 - JavaScript | MDN
対応
以下のようにすると、 Error
の内容やスタックトレースが stringify できる。
const err = new Error('this is erorr') JSON.stringify(err, Object.getOwnPropertyNames(err)) // '{"stack":"Error: this is erorr\\n at repl:1:13\\n at Script.runInThisContext (vm.js:120:20)\\n at REPLServer.defaultEval (repl.js:433:29)\\n at bound (domain.js:426:14)\\n at REPLServer.runBound [as eval] (domain.js:439:12)\\n at REPLServer.onLine (repl.js:760:10)\\n at REPLServer.emit (events.js:327:22)\\n at REPLServer.EventEmitter.emit (domain.js:482:12)\\n at REPLServer.Interface._onLine (readline.js:329:10)\\n at REPLServer.Interface._line (readline.js:658:8)","message":"this is erorr"}'
参考: javascript - Is it not possible to stringify an Error using JSON.stringify? - Stack Overflow