Обработка объектов JavaScript в надстройке C++ 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);
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
605
1

Ответы 1

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

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

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

Я ознакомился с N-API, но мне нужно поддерживать код в версиях узлов 6, 8 и 10. Я понимаю, что он будет перенесен на 6, но до этого времени N-API, к сожалению, не вариант. Я ценю ваше предложение и просто хочу, чтобы оно сработало для меня сейчас - спасибо.

bmacnaughton 24.05.2018 17:38

Другие вопросы по теме