首页 > 解决方案 > 在 v8 中将异常作为字符串抛出

问题描述

在我们的应用程序中,我正在构造一个异常对象,如下所示:

auto exception = v8::Object::New(isolate_);
exception->Set(code_name, code_value);

使用以下调用引发此异常:isolate_->ThrowException(exception);

在控制台和日志中,当我们打印异常时,我们看到的是一个对象而不是异常消息。下面是看到的输出:

[object Object]

我们如何将异常消息视为字符串而不是对象?

标签: javascriptv8

解决方案


从 Javascript中,您可以使用JSON.stringify(exception). 所以你的 Javascript 代码看起来像这样:

try {
    ...
} catch(err) {
    console.log(JSON.stringify(err));
}

然后,您应该在控制台中将完整对象视为字符串,如下所示:

{ "message": "An error occurred.", "code": 123 }

有了这些信息,您可以轻松地在异常对象中找到消息(和其他信息)。

在 C++中,您还可以调用JSON.stringify()

Handle<Object> json = Context::GetCurrent()->Global()->Get(String::New("JSON"))->ToObject();
Handle<Function> stringify = Handle<Function>::Cast(json->Get(String::New("stringify")));

然后您可以使用异常对象作为参数调用该函数,如下所示:

stringify->Call(json, 1, exception);

推荐阅读