相关疑难解决方法(0)

是否无法使用JSON.stringify对错误进行字符串化?

再现问题

尝试使用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.它表明原型包含诸如toStringtoSource之类的方法.知道函数不能被字符串化,我在调用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)

javascript error-handling json node.js

289
推荐指数
12
解决办法
8万
查看次数

为什么我的错误没有在我的明确回复中返回?

我的快速应用程序中有一个默认的错误处理程序设置。

 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 将我的错误作为空对象返回吗?

javascript node.js express

1
推荐指数
1
解决办法
702
查看次数

标签 统计

javascript ×2

node.js ×2

error-handling ×1

express ×1

json ×1