返回

解析 Error 神器——JSON.stringify()

前端

在不久前做 Node 服务端需求时,我遇到了一些服务端报错的问题。通过打日志,我发现这些错误都是 Error 类型,但它们无法很好地透传给前端浏览器。因此,当问题发生时,我只能查看服务端机器的日志,这给调试带来了极大的不便。

经过一番思考,我意识到服务端的内容都是通过 JSON.stringify() 处理的,然后通过在响应头中设置 Content-Type: application/json 来发送给前端。那么,有没有办法使用 JSON.stringify() 将 Error 对象序列化,以便前端能够解析并显示其信息呢?

带着这个问题,我展开了研究。经过一番探索,我发现 JSON.stringify() 确实可以序列化 Error 对象,但需要注意的是,它不会将 Error 对象的堆栈信息也一同序列化。这意味着前端只能看到错误信息,而看不到错误的具体位置。

为了解决这个问题,我们可以使用一个技巧来获取错误的堆栈信息,然后将其附加到 Error 对象中。具体做法如下:

const error = new Error('This is an error message');
error.stack = new Error().stack;
const serializedError = JSON.stringify(error);

这样一来,我们就可以在前端通过 JSON.parse() 解析出包含堆栈信息的 Error 对象了。以下是如何在前端使用 JSON.parse() 解析 Error 对象的示例:

const serializedError = '{ "message": "This is an error message", "stack": "Error: This is an error message\\n    at Object.<anonymous> (/path/to/file.js:1:8)" }';
const error = JSON.parse(serializedError);
console.log(error.message); // This is an error message
console.log(error.stack); // Error: This is an error message
    at Object.<anonymous> (/path/to/file.js:1:8)

通过这种方式,我们就可以轻松地将服务端 Error 对象透传给前端浏览器,从而简化调试过程。希望本篇文章能够帮助到你!