Обработка объектов JavaScript в узле C ++ Nan Addon - PullRequest
0 голосов
/ 12 мая 2018

Мой код передает объект 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);

1 Ответ

0 голосов
/ 24 мая 2018

Если то, что вы ищете, является упрощением, вы должны взглянуть на новый API под названием N-API , поддерживаемый NodeJs.

Код становится светлее, так как вам никогда не придется напрямую касаться какого-либо объекта v8.Официальная документация в основном предназначена для C, но я рекомендую вам взглянуть на оболочку C ++.Документация не полная, но так как вы уже использовали NaN, она очень похожа, и вы можете найти некоторые статьи по ней, а также примеры в папках "node-addon-api" дляВерсии C ++.

инструмент преобразования существует для преобразования кода на основе NaN в код N-API, но, поскольку вы интенсивно используете конструкции v8, я рекомендую вам повторить эти части, используя только API.

...