尝试使用Web套接字传递错误消息时遇到问题.我可以复制我面临的问题,JSON.stringify以迎合更广泛的受众:
// node v0.10.15
> var error = new Error('simple error message');
undefined
> error
[Error: simple error message]
> Object.getOwnPropertyNames(error);
[ 'stack', 'arguments', 'type', 'message' ]
> JSON.stringify(error);
'{}'
Run Code Online (Sandbox Code Playgroud)
问题是我最终得到一个空对象.
浏览器
我首先尝试离开node.js并在各种浏览器中运行它.Chrome版本28给了我相同的结果,有趣的是,Firefox至少做了一次尝试,但遗漏了消息:
>>> JSON.stringify(error); // Firebug, Firefox 23
{"fileName":"debug eval code","lineNumber":1,"stack":"@debug eval code:1\n"}
Run Code Online (Sandbox Code Playgroud)
替换功能
然后我查看了Error.prototype.它表明原型包含诸如toString和toSource之类的方法.知道函数不能被字符串化,我在调用JSON.stringify时包含了一个replacer函数来删除所有函数,但后来意识到它也有一些奇怪的行为:
var error = new Error('simple error message');
JSON.stringify(error, function(key, value) {
console.log(key === ''); // true (?)
console.log(value === error); // true …Run Code Online (Sandbox Code Playgroud) 我的快速应用程序中有一个默认的错误处理程序设置。
app.use(function unhandledErrorHandler(err, req, res, next) {
res.status(err.status || 500).json({
error: err
});
});
Run Code Online (Sandbox Code Playgroud)
但是,每当我调用路线并抛出错误时,我都会收到如下所示的响应。
{
"error": {}
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我理解为什么 Express 将我的错误作为空对象返回吗?