Этот ответ полезен только в том случае, если вы хотите перейти на использование N-API через привязки C ++, node-addon-api (доступно через npm).Вы используете C ++, так что это, вероятно, самый чистый способ сделать кодирование более простым и вероятным для работы.Нет, я не могу сказать вам, что не так с вашим кодом из того, что было опубликовано, так что если это showtopper, то не нужно читать дальше.
С node-addon-api ваше дополнение будет выглядеть примерно так:
#include <napi.h>
// your move function
Napi::Value bestMove(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
int move = Game::bestMove(params);
// just return the number and the C++ inline wrappers handle
// the details
return Napi::Number::New(env, move);
}
// the module init function used in the NODE_API_MODULES macro below
Napi::Object Init(Napi::Env env, Napi::Object exports) {
Napi::HandleScope scope(env);
// expose the bestMove function on the exports object.
exports.Set("bestMove", Napi::Function::New(env, bestMove));
return exports;
}
NODE_API_MODULES(my_game, Init)
В JavaScript вам просто потребуется файл привязок, обычно в build/Release/my_game.node
(или использовать пакет привязок, чтобы вы могли просто потребовать ('my_game')).Так что
const game = require('my_game')
...
move = game.bestMove()
Я не знаю достаточно деталей, чтобы конкретизировать пример лучше.
Я работал с Nan до пакета node-addon-api и нашел его разочаровывающим.Я не пытался использовать V8 напрямую, потому что он связывает мое приложение с конкретной версией узла.
Если вас интересует более подробная информация, посмотрите https://github.com/nodejs/node-addon-api. Это действительно довольно хорошо сделано.
Извинения, если в каком-либо из приведенных выше кодов есть ошибки;Я только сделал это, как я пошел.