问题标签 [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 回答
868 浏览

node.js-addon - 将旧插件迁移到 NAPI

我是 Node.js 插件的新手,我不明白 和 之间的nan区别n-api

是否有一种简单的方法可以将旧版本(节点 v.0)的插件迁移到新版本(节点 v.8)?

0 投票
1 回答
293 浏览

node.js - 使用本机 nodejs(电子)C++ 代码中的“os”模块

我想知道是否可以在本机模块内部使用“os”模块,而无需将其作为 javascript 的参数传递。

它是核心 nodejs/electron 模块之一,所以我认为它应该在内部以某种方式在本机模块中可用。

0 投票
1 回答
2493 浏览

javascript - node.js Nan:在 C++ 函数中调用 JavaScript 回调

我正在为 C++ 库构建一个节点模块包装器,以将日志信息通过Nan传递给 JavaScript。为此,NAN_Method 可用于注册回调。回调处理程序必须通过在 C++ 库中将自己注册为回调vlAddLogListener()。在LoggingCallbackHandlerfunction 处接收来自库的消息dispatchEvent,一个 C++ 函数。如果我收到日志,我想调用 JavaScript 回调来传递数据。

该函数dispatchEvent不在 Nan 上下文中调用,因此我没有范围/上下文,也无法访问 v8。如何调用 JavaScript 回调?

代码如下所示:

0 投票
2 回答
1223 浏览

c++ - 调用某些回调函数两次导致分段错误:Nan

我正在使用nbind 编写 C++ 插件 -大多数事情的GitHub 链接和 Nan -用于异步调用回调的 GitHub 链接。当我只调用一次回调时,它可以完美运行。但是当我调用回调两次时,它给出了Segmentation fault (core dumped). 使用 找不到错误gdb。这是 JS 和 C++ 代码(使用编译node-gyp configure build):

C++插件的代码

0 投票
1 回答
568 浏览

c++ - 一些进展。发送呼叫未到达 nodejs 土地

我使用 AsyncProgressWorker 线程制作了一个 Node 插件来处理我的套接字消息。这是我的代码:

现在我直到今晚才对此进行压力测试,然后我注意到有些消息无法返回节点。它会打印我的“服务器回复”调试日志,但不会记录我放在进度回调中的调试日志。我在这里错过了什么吗?提前致谢。

0 投票
2 回答
2673 浏览

javascript - 将任意 Javascript 数据对象传递给 Node.js C++ 插件

我有一个使用 Nan 用 C++ 编写的 Node.js 插件。效果非常好。但是,我无法弄清楚如何让我的 Node Javascript 代码将任意数据对象(例如{attr1:42, attr2:'hi', attr3:[5,4,3,2,1]})传递给 C++ 插件。

到目前为止,我已经通过调用JSON.stringify()我的数据对象然后在 C++ 端解析字符串化 JSON 来解决这个问题。

理想情况下,我想避免复制数据,而只是获取对我可以访问的数据对象的引用,或者至少在本机复制它并避免字符串化/解析......

任何帮助,将不胜感激!

0 投票
1 回答
158 浏览

javascript - 使用 Nan 检查 node.js 插件中的 instanceof

我试图在打开并开始使用它之前验证传递给节点插件的对象是否属于正确的类型。这是我通过查看网络上的各种资源拼凑而成的解决方案。

持久数据:

初始化函数:

我尝试使用它的地方:

问题是HasInstance()从不返回true。

JavaScript 代码基本上是

0 投票
1 回答
564 浏览

c++11 - nodejs 原生插件:如何修改包含在另一个原生插件中的 c++ 对象成员的值

首先是一些上下文,我有两个 nodejs 原生插件。第一个包含使用嵌入器指南中描述的 v8 对象内部字段公开的静态 c++ 对象“Conn”

在我的另一个本机插件中,我使用 c++ 代码加载第一个插件,并公开了一个名为 test 的函数,其中包含对 Conn 对象“callToDummyFunction()”和“callToFunctionWithMemberAccess()”的两个调用

然后我使用“node”启动一个nodejs会话,我使用两个require调用加载第一个和第二个插件,最后我在第二个插件上调用方法测试。

方法测试执行,对“callToDummyFunction”的调用成功执行,但对“callToFunctionWithMemberAccess”的调用崩溃并终止节点会话。

好的,那么“callToDummyFunction”和“callToFunctionWithMemberAccess”有什么区别?

因此,似乎访问 Conn 对象的成员会产生错误并使节点会话崩溃。节点会话在崩溃之前不输出任何消息。

有人能告诉我为什么吗?

和/或

如何获得错误信息?

0 投票
1 回答
836 浏览

javascript - 如何从派生自 Nan::ObjectWrap 的类返回本机对象?

我有两个简单的类AB我试图在 node.js 的本机模块中公开它们。A是可直接创建的,但 aB只能通过调用A::foo().

我希望能够写:

为此,我创建了两个派生自Nan::ObjectWrap

每个都包含一个实例AB分别。有了这些,我可以从 javascript 中创建一个 A 类型的对象,但是我在实现AWrapper::foo.

我该怎么做才能使此功能起作用?


.cc 文件的完整代码是

并且可以在https://github.com/mikeando/node_nan_minimal找到该示例的完整存储库,您应该能够克隆然后使用npm install.

0 投票
1 回答
648 浏览

javascript - 如何将新的 Nan::ObjectWrap 从 C++ 传递到 Javascript?

我在我的 C++ 节点扩展中定义了以下包装类。

正常的调用顺序是这样的(全部在 Javascript 线程上):

  1. Javascript 调用 MyExtension::UpdateStatus(callbackFunction)
  2. UpdateStatus() 保存 'callbackFunction' 供 SetStatus() 以后使用
  3. UpdateStatus() 调用本机库,该库将状态返回给称为 SetStatus(NativeStatus) 的已知命名方法
  4. SetStatus() 创建一个 'JSStatus',从 nativeStatus 复制值
  5. SetStatus() 将“JSStatus”对象传递给称为 StatusUpdated(JSStatus) 的已知 JavaScript 函数

我被困在#5 上,因为似乎没有办法在 C++ 中“新建”一个 Nan::ObjectWrap,然后将该对象传递给 Javascript。

这似乎很常见,可以被 NAN 覆盖,但我一直无法确定如何去做。有任何想法吗?