javascript - 在 C++ Node nan 插件中处理 JavaScript 对象

标签 javascript c++ node.js v8 node-nan

我的代码将 JavaScript 对象传递给用 C++ 实现的函数。 C++ 代码需要验证每个属性的类型,并在属性丢失或类型错误时提供默认值。

以下代码似乎有效(仅显示整数情况),但我想知道是否有更直接的方法来处理此问题。我绝不是该领域的专家,因此欢迎提出所有改进建议。

int get_integer(
    v8::Local<v8::Object> obj,
    v8::Local<v8::String> prop,
    int default_value = 0) {

    if (Nan::Has(obj, prop).FromMaybe(false)) {
        Nan::MaybeLocal<v8::Value> v = Nan::Get(obj, prop);
        if (!v.IsEmpty()) {
            v8::Local<v8::Value> val = v.ToLocalChecked();
            if (val->IsInt32() || val->IsNumber()) {
                return val->IntegerValue();
            }
        }
    }
    return default_value;
}

它由类似于以下的代码调用:

v8::Local<v8::Object> obj = info[0]->ToObject();
v8::Local<v8::String> prop = Nan::New<v8::String>("prop").ToLocalChecked();
int x = get_integer(obj, prop);

最佳答案

如果您正在寻找简化,您应该看看名为 N-API 的新 API ,由 NodeJs 支持。

代码变得更轻,因为您不必直接接触任何 v8 对象。官方documentation主要针对 C,但我建议您查看 C++ 包装。该文档并不完整,但由于您已经使用过 NaN,因此它非常相似,您可以找到一些关于它的文章以及 the examples ,位于 C++ 版本的“node-addon-api”文件夹下。

一个conversion tool存在将基于 NaN 的代码转换为 N-API 代码,但由于您大量使用 v8 构造,我建议您仅使用 API 重做这些部分。

关于javascript - 在 C++ Node nan 插件中处理 JavaScript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50308990/

相关文章:

c++ - 初始化指针,c 和 c++ 编译器之间的区别 (gcc-4.3.4)

javascript - 在 koa.js 中的中间件之间传递值的最佳方式是什么

node.js - 如何使用nodejs从系统中获取本地时区

javascript - BigInt 的对数

javascript - 如何检测页面上的所有jqGrid是否已加载?

javascript - bxslider 删除图像后留下空白幻灯片

c++ - 如何区分数字输入和字母输入

C++ inet_ntoa 导致段错误

http - 如何在 node.js 中使用 HTTP keep-alive 发送连续请求?

javascript - 当选择父选项 Js、Jquery 时,如何自动选择子选项