问题标签 [node.js-nan]
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.
c++ - 尝试检索时通过 nan 传递数组返回 undefined
我目前正在使用他们的 c++/v8 系统为 NodeJS 编写本机插件,并尝试将数组从 Javascript 写入 C++,然后再检索它。每当我尝试从数组中检索一个值并返回它时,它都会返回一个空数组——因为我最近正在研究 c++,我不确定这是我对指针/c++ 基础或 NodeJS c++ 交互的误解。
我的文件如下:
函数.cc
函数.h
index.js
出于测试目的,代码绝对不是 DRY,它基于通过 github 提供的 nan-boilerplate 代码的非精简版本,可以在此处找到。
重读自己的代码后,我可以肯定地说我的方法命名不好,所以 PassArr 应该设置一个数组,getArr 应该返回“PassArr”传递的数组。SetArray 是我留下的一个骇人听闻的尝试。
重申一下,我试图实现的功能是:
但当前的功能不会保留我的变量。运行 index.js 的结果如下:
c++ - 从另一个 Nan::ObjectWrap 返回一个 Nan::ObjectWrap
我有两个子类Nan::ObjectWrap
如何ZyreEvent
从 in 中的方法返回 javascript 对象Zyre
?
我有以下方法,我在其中创建了一个ZyreEvent
:
但我不能包装 zyre_event 因为Wrap
是受保护的成员。
node.js - 本机 Node.js 插件回调错误 - 找不到指定的过程
我正在编写一个自定义 Node.js 插件。除了使用回调之外,一切都很好。我在 DLL 中有一个需要注册 C++ 函数回调的方法——它接受一个函数,然后在接收到新数据时调用它,这很简单。我想做的是在我的 .cc 文件中,传递一个本地方法,当该方法被触发时,调用 JavaScript 回调。自己调用 JavaScript 回调,并保存回调并稍后调用它可以正常工作。
在我的 addon.cc 中,我有一个除了调用保存的回调之外什么都不做的方法:
我有一个可调用的公开节点方法:
我调用外部 C++ .DLL 的所有其他节点方法都可以工作,它只是将此函数作为 .cc 的参数传递,运行时会引发错误,“未捕获错误:找不到指定的过程。”
不确定问题是什么,或者我是否可以在 .cc 文件中指定一个方法作为回调传递给 C++。
javascript - 如何使用 Nan::MakeCallback 将事件从 nodejs 插件发送到 javascript?
原谅我是 Node 和 Nan 的初学者。现在,我想将来自 nodejs 插件的事件发送到 javascript。
但是,Segmentation fault (core dumped) 那么,如何准确地使用 Nan::MakeCallback 呢?谢谢!
c++ - 从 C++ 向 NodeJS 传递缓冲区时,我的数据消失了
我有以下我不明白的情况。我有一个应用程序,我在 NodeJS 中使用 Nan 调用 C++ 函数。C++端的代码如下:
当我将我的 char 变量发送回 NodeJS 时,我得到 80 个字节,但它们充满了随机值。看起来好像str
变量指向的地方在创建NewBuffer()
.
我的问题
我想得到一个关于发生了什么的解释,理想情况下得到一个潜在的解决方案。
c++ - Node C++ 模块 vs libuv 线程池大小
我编写了一个 Nodejs C++ 模块,它利用 NANAsyncWorker
来公开异步模块功能。效果很好。但是,我知道这AsyncWorker
利用了 libuv 的线程池,默认只有 4 个线程。
虽然这(或基于 #-of-cores 的限制)可能对 CPU 密集型功能有意义,但我公开的一些功能可能会运行相对较长的时间,即使它们不使用 CPU(网络活动等)。因此,即使没有进行计算密集型工作,线程池也可能全部用完。
简单的解决方案是增加线程池大小 ( UV_THREADPOOL_SIZE
)。但是,我担心这个线程池也用于其他事情,这可能会由于过多的并行化而受到性能影响(libuv 文档指出,“线程池是全局的,并且在所有事件循环中共享......” )。
我的担忧有效吗?有没有办法只为某些AsyncWorker
长时间运行但不是 CPU 密集型的线程池使用单独的、更大的线程池,同时保持公共线程池不变?
c++ - C++ 插件中 Node.js/Nan 回调上的不常见 Segfault
我正在使用 Nan 库制作 NodeJS 插件,我遇到了一个问题,即调用回调(在 javascript 端创建并传递给插件以异步执行)将导致段错误 - 但大约只有一次10000左右运行。
一切的运作方式都涉及相当多的复杂性,但我希望有人会看到我错过的东西或能够弄清楚发生了什么。
C++ 回调函数是从 javascript 回调创建的,如下所示:
创建后,它被传递给一个单独的线程,该线程最终将回调发送到使用uv_async_send()
并执行它的主 libuv 线程。这在绝大多数情况下都可以正常工作,但很少会出现nodeCb->Call(2, argv)
在线段错误。
如果有人对这里发生的事情有任何见解,我将不胜感激。
此外,如果有任何帮助,这里是 gdb 的调用堆栈:
编辑:我创建了一个小得多的测试程序来查看是否可以查明错误的来源,并且我发现可以通过将 Callback shared_ptr 更改为常规指针来防止它,并在该nodeCb->Call(2,argv)
行之后立即将其删除。
两者之间是否存在一些可能导致这种情况的语义差异?
c++ - NodeJS C++ 插件中的 Postgres 驱动程序
我目前正在使用抽象层 Nan 为 NodeJS 开发 C++ 插件。我想从这个插件发出 PostgreSQL 请求。但我收到以下错误:
这是我的binding.gyp:
还有我的Main.cpp文件
我被这个错误困住了,我在网上没有找到任何解决方案。如果有人可以提供帮助,我会很好!
c++ - nodejs插件异步回调与libuv
我有一个调用本机 C 库的节点 js 服务。原生库,不断重复触发事件。这些事件被传递给 C 回调函数。我的目标是从本机 C 回调中调用 Javascript 回调。
根据我的阅读,我正在使用 uv_async_init 和 uv_async_send 来实现这个目标。
我遇到的问题是我的本机 C 回调函数被多次调用,并且 uv_async_send 被多次调用,但传递给 uv_async_init 的函数仅在我的程序退出时被调用一次。
这是我的 C 代码:
==================================================== ===
==================================================== ====
这是我的测试 node.js 代码,它调用了上面的本机代码
==================================================== ========
这是输出:
==================================================== =========
为什么 asyncmsg 只被调用一次!即使 recordAudioCallback 被多次调用!程序退出后为什么会调用它!
任何帮助表示赞赏。
node.js - nodejs c++ 插件——无法使用 nan 模块构建 node-gyp
我正在学习如何为 nodejs 构建 C/C++ 插件。
我可以在一个简单的 hello world 程序上成功地配置 node-gyp,构建 node-gyp 并运行 node index.js。所以,我的基本设置正在工作。下面的代码(从官方 nodejs 文档复制粘贴)是我的 C++ 代码的工作版本。
但是,当我使用Nan模块和 nan 站点中记录的代码版本时,我收到编译错误,表明 NanScope 未在此范围内声明。
部分错误输出...
经过一番谷歌搜索,一些网站指出我们应该使用 Nan::Scope,并且 Nan 文档已经过时。我尝试了更改,但仍然无法正常工作。它给出了一个错误,说“Scope 不是 Nan 的成员”。
我找不到,如何正确使用 Nan 版本。这里的任何帮助将不胜感激。