问题标签 [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.

0 投票
1 回答
1516 浏览

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 的结果如下:

0 投票
1 回答
605 浏览

c++ - 从另一个 Nan::ObjectWrap 返回一个 Nan::ObjectWrap

我有两个子类Nan::ObjectWrap

如何ZyreEvent从 in 中的方法返回 javascript 对象Zyre

我有以下方法,我在其中创建了一个ZyreEvent

但我不能包装 zyre_event 因为Wrap是受保护的成员。

0 投票
0 回答
220 浏览

node.js - 本机 Node.js 插件回调错误 - 找不到指定的过程

我正在编写一个自定义 Node.js 插件。除了使用回调之外,一切都很好。我在 DLL 中有一个需要注册 C++ 函数回调的方法——它接受一个函数,然后在接收到新数据时调用它,这很简单。我想做的是在我的 .cc 文件中,传递一个本地方法,当该方法被触发时,调用 JavaScript 回调。自己调用 JavaScript 回调,并保存回调并稍后调用它可以正常工作。

在我的 addon.cc 中,我有一个除了调用保存的回调之外什么都不做的方法:

我有一个可调用的公开节点方法:

我调用外部 C++ .DLL 的所有其他节点方法都可以工作,它只是将此函数作为 .cc 的参数传递,运行时会引发错误,“未捕获错误:找不到指定的过程。”

不确定问题是什么,或者我是否可以在 .cc 文件中指定一个方法作为回调传递给 C++。

0 投票
1 回答
1080 浏览

javascript - 如何使用 Nan::MakeCallback 将事件从 nodejs 插件发送到 javascript?

原谅我是 Node 和 Nan 的初学者。现在,我想将来自 nodejs 插件的事件发送到 javascript。

但是,Segmentation fault (core dumped) 那么,如何准确地使用 Nan::MakeCallback 呢?谢谢!

0 投票
2 回答
263 浏览

c++ - 从 C++ 向 NodeJS 传递缓冲区时,我的数据消失了

我有以下我不明白的情况。我有一个应用程序,我在 NodeJS 中使用 Nan 调用 C++ 函数。C++端的代码如下:

当我将我的 char 变量发送回 NodeJS 时,我得到 80 个字节,但它们充满了随机值。看起来好像str变量指向的地方在创建NewBuffer().

我的问题

我想得到一个关于发生了什么的解释,理想情况下得到一个潜在的解决方案。

0 投票
0 回答
371 浏览

c++ - Node C++ 模块 vs libuv 线程池大小

我编写了一个 Nodejs C++ 模块,它利用 NANAsyncWorker来公开异步模块功能。效果很好。但是,我知道这AsyncWorker利用了 libuv 的线程池,默认只有 4 个线程。

虽然这(或基于 #-of-cores 的限制)可能对 CPU 密集型功能有意义,但我公开的一些功能可能会运行相对较长的时间,即使它们不使用 CPU(网络活动等)。因此,即使没有进行计算密集型工作,线程池也可能全部用完。

简单的解决方案是增加线程池大小 ( UV_THREADPOOL_SIZE)。但是,我担心这个线程池也用于其他事情,这可能会由于过多的并行化而受到性能影响(libuv 文档指出,“线程池是全局的,并且在所有事件循环中共享......” )。

我的担忧有效吗?有没有办法只为某些AsyncWorker长时间运行但不是 CPU 密集型的线程池使用单独的、更大的线程池,同时保持公共线程池不变?

0 投票
1 回答
548 浏览

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)行之后立即将其删除。

两者之间是否存在一些可能导致这种情况的语义差异?

0 投票
1 回答
177 浏览

c++ - NodeJS C++ 插件中的 Postgres 驱动程序

我目前正在使用抽象层 Nan 为 NodeJS 开发 C++ 插件。我想从这个插件发出 PostgreSQL 请求。但我收到以下错误:

这是我的binding.gyp

还有我的Main.cpp文件

我被这个错误困住了,我在网上没有找到任何解决方案。如果有人可以提供帮助,我会很好!

0 投票
1 回答
1153 浏览

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 被多次调用!程序退出后为什么会调用它!

任何帮助表示赞赏。

0 投票
0 回答
918 浏览

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 版本。这里的任何帮助将不胜感激。