问题标签 [node-addon-api]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1940 浏览

c++ - 如何使用 node-addon-api / napi 保存异步回调以供以后使用

AsyncWorker用来运行异步任务。问题是我有很多任务要一个接一个地运行,而且顺序很重要。为了保持秩序,我使用排队技术来确保AsyncWorker对象是按莱特顺序创建的,只有在每个任务完成后。我将回调存储在 avector<Function>中,并将其传递给AsyncWorker,但出现以下错误:

还有其他方法可以解决这个问题吗?我也尝试过使用Napi::Persistent,但我无法将Napi::FunctionReference变量传递给AsyncWorker

调用者函数:

AsyncWorker 构造函数:

编辑 1 我实现了 PromiseWorker,但仍然遇到这些错误:BlockChainWrapper 继承 ObjectWrap。

修改 AsyncWorker 构造函数、类和解析函数:

调用函数:

从另一个队列管理线程调用 Genesis 就绪

0 投票
1 回答
246 浏览

c++ - 使用 node-addon-api 调用 Promise 会引发错误或不提供输出

代码:https ://github.com/t348575/blockchain-api-testing/tree/master

使用 genesis() 添加块。一个线程监视工作队列,并发送要计算的块并将其添加到链中。需要保留订单,这就是我有排队系统的原因。AsyncWorker 中的 Queue() 会处理这个问题吗?如果我的排队系统被删除,这个例子就可以工作。BlockChainWrapper拥有所有功能,并继承自ObjectWrap. 当要执行队列中的一个项目时,AsyncBlockChainWrapper使用 ,它实现PromiseWorker了 ,它执行一些块链工作并返回一个字符串到block_as_json_string,在此之后需要解决承诺。运行BlockchChainAPI.js会引发 V8 错误,而test.js根本没有输出。到底是怎么回事?我是 node-addon-api 的相对论新手。关于如何进行的任何建议?

存储 Napi::Env 和对象供以后使用(blockchainWrapper.cpp)

向量(blockchainWrapper.h):

每 200 毫秒扫描一次工作队列,并调用 AsyncFunctions(AsyncWorker 类)。

0 投票
0 回答
64 浏览

c++ - C++ Nodejs插件数据库连接

我正在学习 NODEJS 插件构建

我能够构建一个简单的应用程序,但现在我在使用插件连接数据库并将查询数据传递给 NODEJS 时遇到问题

谁能建议我该怎么做??

我正在使用电子开发我的应用程序,所以电子的一个主要问题是它是 asar 文件,即使它受到保护,任何人都可以访问它并获取数据库的密码和其他内容,所以我想做的是创建一个 nodejs c++ 插件和在 C++ 中传递查询并运行查询,并将查询结果作为字符串或其他内容返回到前面,然后在前端处理它们现在我能够创建插件但仍然找不到连接到数据库 C++ 的方法,任何地方都没有在 C++ 插件中连接到数据库的方法实际上我不知道这是否可能,但值得一试。现在我知道如何用纯 C++ 连接到数据库,当我在这里尝试连接时,它找不到库。

0 投票
1 回答
219 浏览

javascript - 在 electron.js 或 node.js 应用程序中捕获 c++ 本机插件 cout/console 消息

一旦模块构建完成,C++ 原生模块的 std::cout 控制台消息就不会打印在控制台上。

有什么方法可以在控制台上打印运行时 std::cout 消息,然后我们可以使用 node.js 在电子应用程序中捕获这些消息

node.js 如何运行本机模块,它是在与沙盒程序相同的线程上运行还是在不同的线程上运行?

0 投票
1 回答
597 浏览

c++ - C++ 插件无法与节点 12 一起编译

我正在尝试使用最新版本的节点在 Windows 上编译这个较旧的npm 包,它抛出了一些我不理解的 C 编译器错误。任何帮助理解这些错误以及如何解决它们将不胜感激。

这是引发错误的文件:

我得到的错误如下:

0 投票
0 回答
39 浏览

javascript - 从 js 文件传递​​ package.json 命令

我正在开发一个 node.js 本机插件。在为 32 位和 64 位构建时,我必须为两个不同的字段设置两个不同的命令。

对于32 位


对于64 位

如何使用单个命令适当地设置cmake-js字段和安装字段,或者我们可以通过 java-script 文件传递​​这些命令的任何方式。

我想要类似
npm run install32bit / install64bit

0 投票
1 回答
131 浏览

c++ - cv::createLineSegmentDetector() 函数的 Opencv4nodejs 插件崩溃。异常只能被 catch(...) 捕获。如何调试异常类型?

我正在尝试将 cv::LineSegmentDetector 集成到 opencv4nodejs,这是 opencv 的一个节点插件(链接:https ://github.com/justadudewhohacks/opencv4nodejs )。我已经成功编译了一个由 require 加载的 opencv4nodejs 模块。最初在将 opencv4nodejs.node 模块加载到 js 时遇到了 opencv_core.dll 和 opencv_imgproc.dll 的问题。但是 cv::createLineSegmentDetector() 崩溃 catch( std::exception &e) 不起作用但 catch(...) 异常捕获它。但它仍然不起作用。

这是代码。

这是CC文件。

0 投票
1 回答
1243 浏览

node.js - 添加节点 NAPI 函数作为回调到本机库

是否可以将javascript函数作为回调添加到通过NAPI接受回调的本机库?

这是我到目前为止的一个示例插件代码。

问题是声明的顺序。它似乎OnReadyCallback必须在 RegisterReadyEvent 函数之前声明,否则将无法编译。但是如果我在RegisterReadyEvent之前声明它,jsCallback就变成了一个空指针,它仍然不会编译。

还是有更好更合适的方法来实现同样的目标?

0 投票
1 回答
849 浏览

c++ - 如何将对象从 c 导出到节点插件 api

我有使用 node-addon-api 包装的 c++ 代码:

在里面:

如何返回不同的值或导出对象?以上我只返回

return Napi::String::New(env, sysDateFormat);

我也如何返回isoDateFormat?我的想法是放入对象sysDateFormatisoDateFormat返回它但不确定语法

目前我只返回字符串

更新:

我使用数组来存储这两个值,但返回类型显示编译时错误:no instance of overloaded function "Napi::Array::New" matches the argument list -- argument types are: (Napi::Env, std::string [2])

0 投票
1 回答
351 浏览

node.js - NAPI 插件从 .node 文件中抛出“未定义的符号:omp_get_max_threads”

这似乎是一个奇怪的错误。我尝试逐行调试本机代码,但这个错误似乎突然发生,就像在函数调用结束时一样。这似乎是由我正在使用的本机库中的某些代码部分引起的,因为如果我删除一些函数调用,这个错误似乎消失了。

节点版本:12.16.3 节点gyp版本:6.1.0

顺便说一句,我正在使用 nvm。如果这有帮助。

在搜索了 omp_get_max_threads 之后,我尝试将 -fopenmp 添加到 binding.gyp 文件中的编译器标志中,就像这样。

尽管如此,问题仍然存在。顺便说一句,我使用的是 node-addon-api 包,而不是直接使用 n-api。