javascript - 在 v8 中将异常作为字符串抛出
问题描述
在我们的应用程序中,我正在构造一个异常对象,如下所示:
auto exception = v8::Object::New(isolate_);
exception->Set(code_name, code_value);
使用以下调用引发此异常:isolate_->ThrowException(exception);
在控制台和日志中,当我们打印异常时,我们看到的是一个对象而不是异常消息。下面是看到的输出:
[object Object]
我们如何将异常消息视为字符串而不是对象?
解决方案
从 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);
推荐阅读
- python - SQLite & Python - 获取列中所有值的最快方法?
- c# - 使用 DinkToPdf 库处理将 html 转换为 PDF 需要大量时间
- javascript - 如何对输入 HTML 文本进行后处理以防止 WAF/OWASP 错误?
- php - “调用未定义的方法 Intervention\Image\Image::make()”
- c++ - std::function 接受具有不同传递类型的参数的 lambda 函数(通过 ref,通过 val)
- less - 如何在选择器中使用变量
- javascript - Expressjs Req.method TypeError:无法读取未定义的属性“方法”
- c# - 我的推动机制取决于帧速率
- spring-boot - Spring Boot 和 Kerberos - KrbException:不支持 default_tkt_enctypes 的默认 etypes
- c# - 当它们是字符串时在德语日期之间搜索