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

c++ - 使 v8 对象属性和方法对 JS 可见

我正在包装一个 C++ 对象,node::ObjectWrap并且我定义了一些方法,例如:

一切都按预期工作,我可以通过以下方式在 JS 中创建对象的实例:

所有方法都可以正常工作,但是当我尝试记录该函数时:

我期待看到类似的东西:

但我得到的是:

关于如何使这些可见(又名可枚举)的任何想法?

0 投票
0 回答
145 浏览

c++ - 如何为 NanMakeCallback->Call 设置自定义上下文

NAN 1.7.0targetNanCallbackCall. 此参数允许您设置回调的上下文,即this

但是,无论我做什么this,我的 JavaScript 回调中的值始终是默认Global上下文。我希望在我的 JavaScript 回调中foo提供以下内容。this

0 投票
1 回答
93 浏览

c++ - NanAsyncWorker 参数如何成为“未声明的标识符”

我有这段代码(来自https://github.com/nodejs/nan/tree/master/examples/async_pi_estimate

...编译器说

怎么会这样 ?

0 投票
2 回答
430 浏览

c++ - 我应该如何在 NAN 1.x 中使用数字代码引发错误?

NAN 1.9中,该NanThrowError(const char *msg, const int errorNumber)方法已被弃用,看起来 NAN 2.0 中不存在等效方法。是否有另一种方法可以使用 NAN 获得相同的功能,或者它完全消失了?

0 投票
1 回答
161 浏览

c++ - Node.js C++ 绑定错误:'(' 标记之前的预期构造函数、析构函数或类型转换

我正在尝试更新 Node.js 模块的 C 绑定。我收到此错误:

源代码在这里

可以通过克隆 repo 并执行npm install.

0 投票
0 回答
343 浏览

c++ - 是否可以用新版本的 Nan 编写 Maybe 操作?

Nan 2.0,为了与 Node 4.0 兼容,引入了MaybeMaybeLocaltypes,以及几个返回它们的函数。但是,它们中的大多数似乎不接受 Maybe对象,在某些情况下,我想组合这些方法。例如(假设我有一个返回 a 的函数MaybeLocal<String>),我想做return Nan::To<String>(Nan::Get(object, key))而不是

有没有一种合理的方法可以做到这一点,而无需围绕这些函数中的每一个编写我自己的包装器?

0 投票
1 回答
353 浏览

c++ - 如何检查对象是否是 Nan 2 中构造函数的实例?

Nan 1.x 有一个函数NanHasInstance(Persistent<FunctionTemplate>&, Handle<Value>)来检查一个对象是否是一个构造函数的实例。但是,该功能在 nan 2.0 中被删除,并且没有明显的替代品。nan 是否仍以其他方式公开此功能?如果没有,是否有其他方法可以检查它是否与 Node 版本兼容?

0 投票
1 回答
1922 浏览

c++ - 将字符串设置为 v8 数组

我使用 Nan 研究本机 Node 插件。

因此,我尝试使用以下代码将字符串数组返回给 Node:

但它没有被编译:

error: no matching function for call to ‘v8::Array::Set(int, Nan::imp::MaybeFactoryBase<v8::String>::return_t)’ v8Array->Set(0, Nan::New<String>(str.c_str()) );

但是将项目添加为整数(注释行)可以正常工作。为什么我不能将字符串添加到数组中?

0 投票
0 回答
95 浏览

javascript - 节点绑定不调用 C++ 回调

我被困住了。这是我第一次使用 Node.js 和 javascript。我试图为用 C++ 编写的库实现 Node.js 绑定。我编写了它们并使用一个简单的控制台示例进行了测试,并且它们起作用了。但是,当我使用 http 服务器时,不会调用库中的回调。

让我一步一步解释。库异步接收来自设备的 HID 消息。回调在主线程中调用。应该有一个允许接收这些消息的事件循环。所以对于 Mac OS,我只是做

CFRunLoopRunInMode(kCFRunLoopDefaultMode, milliseconds/1000.0, false) ;

在 while 循环中模拟 C++ 中的事件循环。当我用 Nan 编写绑定时,我认为我不需要这部分代码,因为 Node 的事件循环会替我处理(当我只是运行服务器时)。但是,不会调用 C++ 回调。

如果我添加一个绑定来运行CFRunLoopRunInMode,我会收到我想要的 HID 消息,但是主线程被阻塞并且服务器不工作。

然后我试着把setInterval/setImmediate/setTimeout/nextTick和叫到CFRunLoopRunInMode那里。它适用于大约一百个回调(HID 消息),然后我不再收到 C++ 回调。

我想,我需要一些可以在不阻塞主线程的情况下管理 C++ 回调的东西。希望我解释得足够清楚,如果我在术语/技术细节上犯了错误,我很抱歉。

0 投票
1 回答
732 浏览

c++ - 使用 node-nan 在 node.js 模块中设置 WindowsHookEx

我正在尝试创建一个可以使用全局键绑定执行某些功能的 Electron node.js 应用程序。不幸的是,Electron 中的全局键绑定 API 在游戏中不起作用,因此我需要创建一个本地节点模块来监听这些低级键事件。

所以我使用 node-gyp 用 Visual Studio 2015 和 nan 编译项目来提供 node 和 c++ 之间的通信。我已经设法让项目的两个方面分别工作(低级键绑定和 node.js<-->nan 通信),但我在组合它们时遇到了麻烦。我也承认我对 c++ 的经验很少(我还没有编写过一个 c++ 程序)。

问题 #1:为了能够向 node.js 发送回消息,我需要复制 AsyncProgressWorker::ExecutionProgress 的指针并使其可用于整个类,以便当 HookCallback 触发时它可以向 node.js 发送消息.

编译器不喜欢这样

..\binding.cc(21): 错误 C2440: '=': 无法从 'const Nan::AsyncProgressWorker::ExecutionProgress *' 转换为 'Nan: :AsyncProgressWorker::ExecutionProgress *' [C:\Users\eksrow\ gdrive\projects\vscode\node-native-hello-world\build\bindin g.vcxproj]。

..\binding.cc(21):注意:转换丢失限定符

格式化:

'const Nan::AsyncProgressWorker::ExecutionProgress *'

'南::AsyncProgressWorker::ExecutionProgress *'

我设法通过将关键字 const 添加到私有成员 *executionProgress; 来解决这个问题。但我不明白为什么会修复它,const 变量一旦设置就不应更改。为什么会这样编译?

问题#2:这个非常奇特:

..\binding.cc(22):错误 C3867:'KeyboardEventWorker::HookCallback':非标准语法;使用 '&' 创建指向成员 [C:\Users\eksrow\gdrive\projects\vscode\node-native-hello-world\build\binding.vcxproj] 的指针

我在网上查了很多例子,它们都有相同的语法:

  1. SetWindowsHookEx #1
  2. SetWindowsHookEx #2

关于该行,我看不出我的代码和他们的代码之间的区别。

如果我按照编译器所说的去做并在该行添加一个 & 符号,它会给出一个完全不同的错误:

..\binding.cc(22): error C2276: '&': 对绑定成员函数表达式的非法操作 [C:\Users\eksrow\gdrive\projects\vscode\node-native-hello-world\build\binding .vcxproj] ..\binding.cc(22):错误 C2660:'SetWindowsHookExA':函数不接受 3 个参数 [C:\Users\eksrow\gdrive\project s\vscode\node-native-hello-world\build \binding.vcxproj]