问题标签 [node.js-addon]

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 回答
190 浏览

c++ - 如何在本机节点模块的异步工作类中使用复杂的 v8 数据类型?

我尝试使我的节点模块方法异步。我创建了一个 AsyncWorker 类,但遇到了一些事情:/

我的 Nan::AsyncWorker 如下所示...

--

当我实现此方法时,调用崩溃而没有其他信息。进一步阅读指出访问 V8 或 V8 数据结构是不安全的。所以我认为这是因为同步方法有效的原因。

  1. 我需要将所有变量转换为Nan数据类型吗?如果是这样,什么是等价的Nan::v8::Local<v8::Array>以及v8::Handle<v8::Array>如何转换它们,反之亦然?
  2. C++代码执行失败时如何获取有用的异常信息?

完整的源代码可在此处获得:https ://github.com/sa/iso-8583/blob/30ac35796ba5014ad5668ac2919fddcb3b082580/functions.cc#L144 。只需克隆 reponpm installnpm test

也许有人喜欢创建一个 PR :),无论如何,我对任何帮助提示感到非常高兴!我只是希望使现有方法异步更简单^^

0 投票
1 回答
912 浏览

c++ - 如何转换 node-addon Persistent到本地?

我正在尝试使用旧的 v8 API 更新 node.js 插件。

这是我的wrapper.cpp代码:

如果我理解正确,作者正在使用 mapPersistent<function>来存储回调(参见callback_mapstd),但是当 时node-gyp build,编译器会抛出此错误:

将此代码更新为新的 v8 API 以便我可以使用最后一个节点版本运行它的最佳方法是什么?

非常感谢。

0 投票
1 回答
206 浏览

node.js - How to create namespace hierarchy in node.js addon?

I'm creating a node.js addon, which has bunch of classes. I want to organize them in a hierarchical namespace. If I were doing this in Javascript it would look like this

I'm using Nan to write my node.js binding. To achieve the above result I've written code as follows:

com.h

com.cpp

example.h

example.cpp

person.h

person.cpp

This code compiles and also successfully passes the tests when run. However I get a warning when the addon is loaded.

It prints a stack trace. The top of this trace is at the line marked XXXXXX.

If this is not the recommended way to define a FunctionTemplate as a member of another FunctionTemplate, then what's the right way to achieve it? Any ideas?

0 投票
2 回答
956 浏览

c++ - 如何将二进制数据从 C++ 传递到 Node.js

我在 C++ 变量缓冲区中有一个二进制数据,如下所示:

我想将此缓冲区传递给 Node.js 并写入文件。我使用下面的行将其转换为本地,然后包装为一个对象:

但是,在 node.js 中,当我检查接收数据的长度时,它只打印 9 并且值似乎已损坏。

此处 rahul2.jpg 已损坏,只有 9 个字节。我们如何从 node.js 代码中获取 rahul2.jpg 与 c++ 中的 rahul.jpg 相同?我们应该使用哪个 Nan::New() 来传递不受影响的二进制数据?请帮忙。谢谢。

0 投票
1 回答
916 浏览

c++ - 如何向功能化 module.exports 添加方法

问题。如何module.exports在我的插件中添加功能化方法?

我想执行以下节点代码。

以下是核心 C++ 代码。

但它会引发一些错误。

如果我评论第 3 行,则会继续抛出相同的错误。

但是当我评论第 3 行和第 4 行时,它会打印“hello world”。

0 投票
1 回答
689 浏览

node.js - 如何使用 nan 在 nodejs 中获取任意大小的缓冲区

我有一个 node js 应用程序,它使用sharp对大文件进行一些图像处理,然后使用 nan 与 node.js 交互。当我加载一个非常大的图像时,我从 nan 收到一个错误,上面写着

node: ../node_modules/nan/nan.h:679: Nan::MaybeLocal<v8::Object> Nan::NewBuffer(char*, size_t, node::Buffer::FreeCallback, void*): Assertion `length <= imp::kMaxLength && "too large buffer"' failed. Aborted (core dumped)

你可以在这里看到 nan.h 的第 679 行

但总而言之,它是这样说的:

// arbitrary buffer lengths requires // NODE_MODULE_VERSION >= IOJS_3_0_MODULE_VERSION assert(length <= imp::kMaxLength && "too large buffer");

我有

$ node -v v4.4.6

您可以看到文件顶部的哪个版本应该是比 更高的版本IOJS_3_0_MODULE_VERSION,提供任意长度的缓冲区。但是,断言没有被 s 包围#ifdef。有谁知道在使用 nan 时如何使用任意长度的缓冲区?

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 投票
0 回答
106 浏览

c++ - 检查在 C++ 中创建的对象时出现节点错误

我有一段(大)代码在 C++ 中作为 nodejs 的附加组件。当我尝试检查导出模块的对象时,部分代码使 nodejs 在内部引发异常。

我进行了一些调查,发现我拥有的命名属性(或拦截器)使这种情况发生。如果我将此属性的导出对象的集合注释掉,则该对象会显示在节点中,其中包含我从 C++ 公开的所有函数和变量。

要创建和设置命名属性,我使用为它创建的宏,但基本上是这样做的:

getter 函数返回某些特定输入的数字,否则返回未定义的。一个例子:

我的问题是是否有可能解决“这个问题”并避免在使用命名属性检查对象时引发异常。

我使用节点 6.3.1 和 Nan 2.4.0。似乎Linux上的问题,一切都一样,有效。也许这只发生在 OS X 上。

要测试这种奇怪的行为,您可以下载我的项目,构建它(您需要在某处安装 libFLAC)并尝试在节点中执行以下行:

如果它显示带有f.load()函数的对象,请使用 flac 库的完整路径调用它,并且也会显示错误。

0 投票
0 回答
112 浏览

c++ - C++ nodejs插件实现抛出v8.h错误,但在nodejs端工作正常

我正在处理一个关于 C++ 中 Nodejs 插件的简单示例,取自有关 Nodejs 插件的官方文档(这不是什么大事)。

该示例在使用构建时运行良好,node-gyp build并且从 nodejs 端执行完全可以。但是,我在与 v8.h 文件相关的 C++ 方面遇到了一堆错误。这些错误没有帮助,因为它们不允许我继续我在 C++ 方面的工作。

它们可能是一些链接错误,因为我找不到 libv8.a 文件,但这里有一些示例供您自己查看:

还有许多其他的,都位于 v8.h 中。

我尝试构建 v8 库但没有成功,但我想知道问题是否真的来自于此。

编辑 1

我忘了提到我正在使用 eclipse-cpp 来处理 C++ 项目。我需要做的是使用.cpp该项目中的一个作为 Nodejs 插件的入口,而不是整个项目,但错误阻止我使用其他类和文件。

我的 GCC 现在是 4.9.3 版本,我安装了 clang-3.5。我仍然不知道现在该怎么做,因为错误仍然存​​在。

0 投票
1 回答
605 浏览

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

我有两个子类Nan::ObjectWrap

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

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

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