问题标签 [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.
c++ - 如何在本机节点模块的异步工作类中使用复杂的 v8 数据类型?
我尝试使我的节点模块方法异步。我创建了一个 AsyncWorker 类,但遇到了一些事情:/
我的 Nan::AsyncWorker 如下所示...
--
当我实现此方法时,调用崩溃而没有其他信息。进一步阅读指出访问 V8 或 V8 数据结构是不安全的。所以我认为这是因为同步方法有效的原因。
- 我需要将所有变量转换为
Nan
数据类型吗?如果是这样,什么是等价的Nan::
,v8::Local<v8::Array>
以及v8::Handle<v8::Array>
如何转换它们,反之亦然? C++
代码执行失败时如何获取有用的异常信息?
完整的源代码可在此处获得:https ://github.com/sa/iso-8583/blob/30ac35796ba5014ad5668ac2919fddcb3b082580/functions.cc#L144 。只需克隆 reponpm install
和npm test
也许有人喜欢创建一个 PR :),无论如何,我对任何帮助提示感到非常高兴!我只是希望使现有方法异步更简单^^
c++ - 如何转换 node-addon Persistent到本地?
我正在尝试使用旧的 v8 API 更新 node.js 插件。
这是我的wrapper.cpp
代码:
如果我理解正确,作者正在使用 mapPersistent<function>
来存储回调(参见callback_map
std),但是当 时node-gyp build
,编译器会抛出此错误:
将此代码更新为新的 v8 API 以便我可以使用最后一个节点版本运行它的最佳方法是什么?
非常感谢。
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?
c++ - 如何将二进制数据从 C++ 传递到 Node.js
我在 C++ 变量缓冲区中有一个二进制数据,如下所示:
我想将此缓冲区传递给 Node.js 并写入文件。我使用下面的行将其转换为本地,然后包装为一个对象:
但是,在 node.js 中,当我检查接收数据的长度时,它只打印 9 并且值似乎已损坏。
此处 rahul2.jpg 已损坏,只有 9 个字节。我们如何从 node.js 代码中获取 rahul2.jpg 与 c++ 中的 rahul.jpg 相同?我们应该使用哪个 Nan::New() 来传递不受影响的二进制数据?请帮忙。谢谢。
c++ - 如何向功能化 module.exports 添加方法
问题。如何module.exports
在我的插件中添加功能化方法?
我想执行以下节点代码。
以下是核心 C++ 代码。
但它会引发一些错误。
如果我评论第 3 行,则会继续抛出相同的错误。
但是当我评论第 3 行和第 4 行时,它会打印“hello world”。
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)
但总而言之,它是这样说的:
// 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 时如何使用任意长度的缓冲区?
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++ - 检查在 C++ 中创建的对象时出现节点错误
我有一段(大)代码在 C++ 中作为 nodejs 的附加组件。当我尝试检查导出模块的对象时,部分代码使 nodejs 在内部引发异常。
我进行了一些调查,发现我拥有的命名属性(或拦截器)使这种情况发生。如果我将此属性的导出对象的集合注释掉,则该对象会显示在节点中,其中包含我从 C++ 公开的所有函数和变量。
要创建和设置命名属性,我使用为它创建的宏,但基本上是这样做的:
getter 函数返回某些特定输入的数字,否则返回未定义的。一个例子:
我的问题是是否有可能解决“这个问题”并避免在使用命名属性检查对象时引发异常。
我使用节点 6.3.1 和 Nan 2.4.0。似乎Linux上的问题,一切都一样,有效。也许这只发生在 OS X 上。
要测试这种奇怪的行为,您可以下载我的项目,构建它(您需要在某处安装 libFLAC)并尝试在节点中执行以下行:
如果它显示带有f.load()
函数的对象,请使用 flac 库的完整路径调用它,并且也会显示错误。
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。我仍然不知道现在该怎么做,因为错误仍然存在。
c++ - 从另一个 Nan::ObjectWrap 返回一个 Nan::ObjectWrap
我有两个子类Nan::ObjectWrap
如何ZyreEvent
从 in 中的方法返回 javascript 对象Zyre
?
我有以下方法,我在其中创建了一个ZyreEvent
:
但我不能包装 zyre_event 因为Wrap
是受保护的成员。