问题标签 [node-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 投票
0 回答
244 浏览

c++ - 如何在 nodejs 插件中调用两个参数构造函数?

我是 nodejs 插件的新手,并且正在学习使用现有代码。我有一种情况,我不了解如何调用特定的 C++ 构造函数,也不了解如何设置参数的值。

有两个纯 C++ 构造函数:

有三个NewInstance声明:一个有两个参数,一个有一个,一个没有。

还有模块初始化代码执行了一些魔术来制作构造函数模板:

最后,有调用的代码Event::NewInstance

通过日志记录,我看到NewInstance(md)调用最终调用了两个参数 C++ 构造函数Event::Event(const oboe_metadata_t *md, bool addEdge),并且布尔值addEdge是真的。

单参数NewInstance调用如何最终调用两个参数构造函数以及如何addEdge设置为 true?

我不清楚v8::Local<v8::Object> Event::NewInstance()声明的三种变体如何映射到 C++ 构造函数,但似乎它必须在行中v8::Local<v8::FunctionTemplate> ctor = Nan::New<v8::FunctionTemplate>(New);

任何帮助,将不胜感激。

这是显示我跳过的“新建”函数的缺失代码,因为注释说它创建了一个新的 JavaScript 实例。但这显然是缺少的部分。

0 投票
1 回答
728 浏览

c++ - Node addon compilation error

I am new to creating c++ addons for node.
I've instaled windows-build-tools and after running node-gyp build I've encountered a strange problem.

I tryed to do some research before asking this question but it seams there is no clear answer.

I've also tryed reinstaling node-gyp and build tools.

My question is what is the cause of this problem and how to fix it

0 投票
0 回答
514 浏览

javascript - 如何在 nodejs 插件中包含 C/C++ 纯编写的头文件?

我正在处理 nodejs 本机调用我有纯编写的 C/C++ 头文件,如何在本机文件中包含文件以执行而不将它们转换为本机代码。

以下是 C/C++ 头文件的示例代码:-

我看到本机头文件代码如下所示

0 投票
1 回答
695 浏览

javascript - 在 C++ 节点 nan 插件中处理 JavaScript 对象

我的代码将一个 JavaScript 对象传递给一个用 C++ 实现的函数。C++ 代码需要验证每个属性的类型,并在属性缺失或类型错误时提供默认值。

以下代码似乎有效(仅显示整数大小写),但我想知道是否有更直接的方法来处理这个问题。我绝不是该领域的专家,因此欢迎所有改进建议。

它由类似于以下的代码调用:

0 投票
2 回答
965 浏览

node.js - 如果承诺已解决,如何签入 node.js C++ 插件

任务:

我从 C++ 调用一个回调,它返回一个 v8::Promise (所以是一个异步函数)。现在我想知道承诺是否已解决。

对于此处的此示例,我想从 JS 中检查承诺是否已解决。但是“只是在 C++ 插件中得到通知”就可以了。

问题:

我未能在 C++ 中创建持久的 Promise 对象。我还在事件循环中工作。但是当我稍后再次进入事件循环时,该对象是空的。

编码:

JS测试代码

现在是 C++ 方面(顺便说一下 - 不用说我既不是 C++ 也不是 JS 大师)(原文取自 NAN - Node.js 的本机抽象)。为了复制,我把完整的代码放在这里。重要的是CallAsyncFunctionIsPromiseResolved函数。

我得到的实际错误是:

对不起,这是一个很长的帖子。(但我想把代码放在这里——如果有人想试试这个。)

0 投票
1 回答
190 浏览

javascript - TypeError: [c++ 插件类] 不是构造函数

TypeError: m.Default is not a constructor是我尝试使用 NAN 创建 JavaScript 类时遇到的错误。

这就是我正在做的事情:

音频设备控制器.cc:

索引.cc:

绑定.gyp:

index.js:

这是完整的错误输出:

我试图实现的结果是能够new在 JavaScript 中使用关键字来创建各种对象。我还需要能够使用 C++ 实例化我在 C++ 代码中声明的新 JS 对象。我只能猜测 Node 没有识别我声明的对象。我正在从事的项目中有几个这样的对象,这个是最简单的例子。

可以在此处找到将要使用的完整项目。

  • 我正在使用 Windows 10 进行编译
  • 节点版本:8.11.3
  • 南版:2.10.0
  • 节点gyp版本:3.7.0。
0 投票
1 回答
79 浏览

node.js - NODE N-API 使用插件中的函数时会阻塞主进程节点 js?

使用 N-API 为函数实现了一个包装器。它可以工作,但问题是当它工作时节点的主线程不起作用?如何重写此函数以使其不会阻塞主线程?我需要为此使用异步、回调、线程什么?

0 投票
1 回答
1719 浏览

node.js - 如何使用 v8::String::NewFromUtf8 的 Maybe 版本?

我正在尝试针对 Node 12 构建本机节点模块,但遇到以下错误:

在代码上,例如:

我理解错误,但基于 v8::String 文档,我无法弄清楚如何指定 Maybe 版本......原型看起来一样。如何使用此功能的 Maybe 版本?

0 投票
1 回答
624 浏览

c - 如何使用 node.js N-API 函数检查 napi_number 类型的 napi_value 是整数还是小数,

如何使用 node.js 原生 N-API 函数检查给定的napi_number类型的napi_value整数还是小数(带有小数值的数字)。看起来 N-API 中没有 isInt() 或 isDouble() 等效函数(我们也不想使用 V8 函数调用)。让我们考虑一个场景,我们通过传递一个 JavaScript 对象作为参数从 JavaScript调用本机插件函数f1() ,如代码段所示。

本机函数f1()希望通过调用最佳拟合值提取 N-API 函数来提取与键n1n2关联的值。例如,要提取n1的值,最好使用napi_get_value_int*之一,同样对于n2double是更好的选择。

不幸的是,我找不到任何 N-API 函数来验证napi_number 属性的导数。你有没有遇到过类似的情况,如果有,你是怎么解决这个问题的?

https://nodejs.org/api/n-api.html

0 投票
1 回答
410 浏览

c++ - 如何使用 node-addon-api 实现 node-nan 回调

到目前为止,我只实现了同步的 node-addon-api 方法,即一个 JavaScript 函数进行调用,工作完成,然后插件返回。关于 v8、libuv 和 node 的内部工作原理,我有很大的知识空白,所以请纠正任何明显的误解。

目标是在从 v8 调用 C++ 垃圾回收回调时调用 JavaScript 回调。我最初只是从 v8 垃圾收集回调中调用了 JavaScript 回调,但在几次调用后最终得到了一个 segv。似乎只是在从 v8 回调调用时调用 JavaScript 有一些问题(v8 文档回调不应该分配对象)。所以我环顾四周,发现了一个基于 Nan 的示例,它使用libuv和 NanAsyncResource进行回调。以下方法使用node-nan

我的问题是如何使用 node-addon-api 而不是 nan 来做到这一点?

我不清楚 node-addon-api 等价的uv_async_init,uv_async_send等是什么。这部分是因为我不清楚需要哪些底层N-API(而不是node-addon-api)功能。

我一直找不到这样的例子。回调示例是完全同步的。async pi 示例使用工作线程来执行任务,但与使用原语的基于 nan 的代码中的方法相比,这似乎有点过头了uv