在前端开发中,我们经常需要处理错误对象,但是 JavaScript 的 Error 对象无法直接转换成 JSON 字符串,这就给错误信息的传递和打印带来了麻烦。为了解决这个问题,可以使用 serializerr
这个 npm 包来将 Error 对象转换成可序列化的对象。
安装
使用 npm 可以很方便地安装 serializerr
包:
npm install serializerr
实例演示
假设我们有一个函数 foo()
抛出了一个异常,我们先看一下默认情况下 console.log()
打印的错误信息:
try { function foo() { throw new Error('something went wrong'); } foo(); } catch(err) { console.log(err); }
输出结果为:
-- -------------------- ---- ------- ------ --------- ---- ----- -- --- ----------------------- -- ------------------ ---------------------- -- --------------- --------------------------------------- -- ----------------------------- ---------------------------------------- -- ----------- --------------------------------------- -- --------------------- --------------------------------------- -- ------------------------------ --- -------- ------------------------------------ -- -------------------------------------- - ------ ------- --------- ---- ------- -- --- ------------------------- -- ------------------ ------------------------ -- --------------- ----------------------------------------- -- ----------------------------- ------------------------------------------ -- ----------- ----------------------------------------- -- --------------------- ----------------------------------------- -- ------------------------------ --- -------- -------------------------------------- -- ---------------------------------------- -------- ---------- ---- ------ -
我们可以看到,错误信息中包含了堆栈信息和一些非 JSON 格式的属性,无法直接序列化成 JSON。
现在,我们只需要在打印错误信息之前使用 serializerr
包进行转换即可:
-- -------------------- ---- ------- ----- -------------- - ----------------------- --- - -------- ----- - ----- --- ---------------- ---- -------- - ------ - ---------- - --------------------------------- -
输出结果为:
{ "name": "Error", "message": "something went wrong", "stack": "Error: something went wrong\n at foo (/path/to/file.js:3:13)\n at Object.<anonymous> (/path/to/file.js:6:3)\n at Module._compile (internal/modules/cjs/loader.js:999:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)\n at Module.load (internal/modules/cjs/loader.js:863:32)\n at Function.Module._load (internal/modules/cjs/loader.js:708:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)\n at internal/main/run_main_module.js:17:47", "code": null }
我们可以看到,使用 serializerr
转换后的结果已经是一个可以被序列化为 JSON 的对象了,便于通过网络或者存储在本地文件中传递和打印。
总结
serializerr
包提供了一种方便、快捷的方式将 JavaScript 的 Error 对象转换成可序列化的对象。在前端开发中,特别是涉及到错误信息传递的场景下,这个包将会大有用处。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/41920