问题标签 [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.
node.js - 节点 NAN:在 AsyncWorker 的 Execute 方法中调用 GetFromPersistent 设置错误
我正在为节点构建一个本机扩展,其中包括一个长时间运行的操作,并在完成时进行回调。
我将节点缓冲区传递给调用。它包含扩展要处理的内容的有效负载。
我应该能够将我的缓冲区存储在我的 AsyncWorker 的构造函数中的持久存储中,并在以后需要时检索它。
这个例子(来自 nan 测试套件)是我通常基于我的代码的: https ://github.com/nodejs/nan/blob/master/test/cpp/bufferworkerpersistent.cpp
该测试有效,但在使用 HandleOKCallback 方法之前它不会对缓冲区做任何事情,这对我来说不是很有趣。我需要在 Execute 方法期间访问缓冲区。
如果我只是在测试的 Execute() 方法中添加一行来尝试访问缓冲区,如下所示:
GetFromPersistent 调用出现段错误。
我的问题是:我错过了什么?我是否应该无法将持久对象拉入 Execute 方法?如果是这样,为什么不呢?
c++ - 这与 ObjectWrap::Unwrap 的持有人
该类v8::FunctionCallbackInfo
区分This
和Holder
。我知道this
JavaScript 中有什么,并假设它This
反映了该设置。但是我对什么是什么只有一个模糊的概念Holder
,而且对于何时应该使用Holder
而不是This
.
特别是,在编写基于 nan 的 node.js 扩展并解包ObjectWrap
时,我应该通过哪些?
当前node::ObjectWrap
文档有示例 usingHolder
而当前Nan::ObjectWrap
文档使用This
,因此“仅按照文档中的示例”无助于回答这个问题。
node.js - 错误:找不到模块“nan”
我正在开发本机 Node.js 插件并关注nan 文档
我将 nan 包含在 binding.gyp 中,例如:
"include_dirs" : [ "<!(node -e \"require('nan')\")" ]
nan 也在 npm 依赖项中。
但是当我在另一个节点模块中安装包时 node-gyp 失败并出现错误
c++ - 如何使用新版 Node Nan Persistent
使用以下等效代码的新版本Nan
:以下代码适用于 0.12.*,但不适用于 4.3.0 及更高版本。
javascript - v8::value 到日期之间的转换
我正在使用 nan 在 v8 上编写 C++ 插件。构造函数的参数之一是 Date 类型。IsDate 返回 true,但我不知道如何将其转换为 C++ Date 对象以获取年、月和日等。
感谢您的帮助!
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 :),无论如何,我对任何帮助提示感到非常高兴!我只是希望使现有方法异步更简单^^
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() 来传递不受影响的二进制数据?请帮忙。谢谢。
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 时如何使用任意长度的缓冲区?