Tag: node.js addon

如何在“node-gyp rebuild”中声明“'NewInstance'已被弃用”警告? v8中NewInstance的替代select是什么?

你好V8程序员和节点gyp'ers。 我正在运行OS X 10.12.6 ,使用npm v3.10.10 , nan v2.6.2 , gcc作为XCode的一部分使用此版本输出运行的Node v6.11.1 : $ > gcc –version Configured with: –prefix=/Applications/Xcode.app/Contents/Developer/usr –with-gxx-include-dir=/usr/include/c++/4.2.1 Apple LLVM version 8.1.0 (clang-802.0.42) Target: x86_64-apple-darwin16.7.0 Thread model: posix 请帮我理解如何正确使用NewInstance并消除在我的自定义软件包安装的npm install或node-gyp rebuild过程中的警告? > node-gyp rebuild CXX(target) Release/obj.target/cellcrypt/src/cellcrypt.o CC(target) Release/obj.target/cellcrypt/src/decode.o CXX(target) Release/obj.target/cellcrypt/src/DecryptionWrapper.o ../src/DecryptionWrapper.cpp:55:44: warning: 'NewInstance' is deprecated [-Wdeprecated-declarations] v8::Local<v8::Object> instance = cons->NewInstance(); ^ /Users/sjcbsolo/.node-gyp/6.11.1/include/node/v8.h:3276:52: […]

节点缓冲区为字符数组

我有一个本地的NodeJS插件,它接受一个Buffer实例作为参数之一。 我可以用下面的代码将一个char数组转换成一个Buffer ,但是也可以用另一种方式来查找。 static v8::Local<v8::Object> create_buffer(char *data, unsigned long length) { node::Buffer *slow_buffer = node::Buffer::New(length); memcpy(node::Buffer::Data(slow_buffer), data, length); v8::Handle<v8::Value> constructor_arguments[3] = { slow_buffer->handle_, v8::Integer::New(length), v8::Integer::New(0) }; v8::Local<v8::Object> global_object = v8::Context::GetCurrent()->Global(); v8::Local<v8::Function> buffer_constructor = v8::Local<v8::Function>::Cast(global_object->Get(v8::String::New("Buffer"))); return buffer_constructor->NewInstance(3, constructor_arguments); }

inheritanceC ++中的JavaScript函数

我有一个JavaScript的基本function: function Animal { } Animal.prototype.move = function () { //… } 我也有一个派生的JavaScript函数,像这样: function Dog { Dog.super_.call(this); } util.inherits(Dog, Animal); Dog.prototype.bark = function () { // … } 现在我想创build一个与派生的Dog JavaScript函数完全相同的C ++插件: void Dog::Init(Handle<Object> exports, Handle<Object> module) { Isolate* isolate = Isolate::GetCurrent(); Local<Function> require = Local<Function>::Cast(module->Get( String::NewFromUtf8(isolate, "require"))); Local<Value> args[] = { String::NewFromUtf8(isolate, "./animal") }; Local<Value> […]

node.js Nan:在C ++函数中调用JavaScriptcallback

我正在为C ++库构build一个节点模块包装器来将日志信息通过Nan传递给JavaScript。 为此NAN_Method可用于注册callback。 callback处理程序必须通过vlAddLogListener()将其自身注册为C ++库中的callback。 LoggingCallbackHandler从库函数dispatchEvent (一个C ++函数)接收消息。 如果我收到日志,我想调用JavaScriptcallback来传递数据。 函数dispatchEvent不在Nan上下文中调用,因此我没有范围/上下文,也没有访问v8的权限。 如何调用JavaScriptcallback? 代码如下所示: NAN_METHOD(registerLoggingCallback) { v8::Isolate* isolate = info.GetIsolate(); v8::Local<v8::Function> fun = info[0].As<v8::Function>(); lch = new LoggingCallbackHandler(isolate, fun); } LoggingCallbackHandler::LoggingCallbackHandler(v8::Isolate* isolate, v8::Local<v8::Function> fun) : _cb(isolate, fun) { vlAddLogListener(&LoggingCallbackHandler::dispatchEvent, this); } void VL_CALLINGCONVENTION LoggingCallbackHandler::dispatchEvent(const char* eventData, void* clientData) { // here I want to process the data […]

错误:找不到模块“南”

我正在研究本地的Node.js插件和下面的nan文档 我将nan包含在binding.gyp中,如: "include_dirs" : [ "<!(node -e \"require('nan')\")" ] 另外nan是在npm的依赖关系。 但是当我在另一个节点模块中安装软件包时,node-gyp失败并报错 > nnb@1.0.2 install /Users/Shopgate/sandbox/stress/node_modules/nnb > node-gyp rebuild module.js:338 throw err; ^ Error: Cannot find module 'nan' at Function.Module._resolveFilename (module.js:336:15) at Function.Module._load (module.js:278:25) at Module.require (module.js:365:17) at require (module.js:384:17) at [eval]:1:1 at Object.exports.runInThisContext (vm.js:74:17) at Object.<anonymous> ([eval]-wrapper:6:22) at Module._compile (module.js:460:26) at evalScript (node.js:431:25) at startup […]

从nodejs模块初始化函数报告失败

我有一个nodejs C ++模块,我想了解如何报告初始化错误。 所以这样的样板是: extern "C" void Initialize(v8::Handle<v8::Object> instance) { // Do initialization stuff } NODE_MODULE(SomeModuleType, Initialize) 如果没有返回types,我如何报告Initialize的错误,我不能抛出,因为它是extern "C" ? 有什么特定的回拨,我应该打电话? 另外,从暴露给nodejs的callback方法报告错误的最佳做法是什么? 是否返回null对象的常见做法,或者我可以扔在那里,将显示为JavaScript方面的exception?

节点JS – 模块没有自行注册

我经历了不同的职位,其中大部分人build议重build/重新安装/更新npm,我尝试了,但没有帮助。 我想用C ++的node.js的例子,下面是文件的细节 TestNode.cpp #include<iostream> class TestNode { public: void printHelloW() { std::cout << "Hello World!!!"; } }; binding.gyp { "targets": [ { "target_name": "newexample", "sources": [ "TestNode.cpp" ] } ] } 现在来执行,它会抛出错误,说模块不是自我注册。 D:\newexample>node-gyp configure gyp info it worked if it ends with ok gyp info using node-gyp@3.3.1 gyp info using node@5.10.0 | win32 | […]

我怎样才能得到一个V8函数返回一个C ++对象?

我目前正在尝试更新Node.js的C ++库包装器。 目前它使用楠1.0,我需要将其转换为使用最新版本,楠2.0。 但是,我遇到了一个有趣的问题。 我有这两行: Local<Object> obj; obj = Nan::Get(result_object, conns[i].from_neuron).As<Object>(); 当使用node-gyp编译时,我收到错误 ../src/fann-accs.cc:286:59: error: 'Nan::MaybeLocal<v8::Value>' has no member named 'As' obj = Nan::Get(result_object, conns[i].from_neuron).As<Object>(); 我如何获得Nan :: Get函数来返回一个c ++对象?

我怎样才能返回一个看起来像一个节点插件数组的东西?

我正在为节点实现本地模块,并试图返回看起来像一个数组,但由本机数据支持的东西。 目前我创build一个ObjectTemplate和使用SetIndexedPropertyHandler,所以我可以处理尝试从JS获取索引。 这一切工作,但从JS这看起来像一个对象,而不是一个数组。 有什么办法可以让这看起来更像一个数组?

nodejs使用libuv插件asynchronouscallback

我有一个节点js服务调用本地C库。 本土的图书馆,反复不断地发生火灾事件。 这些事件被传递给Ccallback函数。 我的目标是从这个本地Ccallback调用Javascriptcallback。 根据我的阅读,我使用uv_async_init和uv_async_send来实现这个目标。 我遇到的问题是我的本地Ccallback函数被调用了很多次,并且在那里uv_async_send被调用了很多次,但是传递给uv_async_init的函数只被调用了一次,只有当我的程序退出的时候。 这是我的C代码: ================================================== === #include "jsaudio.h" #include <iostream> using namespace v8; static void recordAudioCallback(int index); void asyncmsg(uv_async_t* handle); Callback* cbPeriodic; uv_async_t async; uv_loop_t* loop; NAN_METHOD(createEngine) { std::cout << "==> createEngine\n" ; } void createAudioRecorder(const Nan::FunctionCallbackInfo<v8::Value>& info) { std::cout << "==> createAudioRecorder\n"; } void startRecording(const Nan::FunctionCallbackInfo<v8::Value>& info) { std::cout << "==> […]