問題タブ [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 で入手できます。npm install
リポジトリを複製するだけですnpm test
誰かが PR を作成するのが好きかもしれません :) とにかく、役立つヒントがあればとてもうれしいです! 既存のメソッドを非同期にすることがもっと簡単になることを願っていました ^^
node.js - node.jsアドオンで名前空間階層を作成するには?
たくさんのクラスを持つ node.js アドオンを作成しています。それらを階層的な名前空間で整理したいと考えています。これを Javascript で実行すると、次のようになります。
Nan を使用して node.js バインディングを作成しています。上記の結果を達成するために、次のようにコードを記述しました。
com.h
com.cpp
たとえば .h
たとえば .cpp
person.h
人.cpp
このコードはコンパイルされ、実行時にテストに合格します。ただし、アドオンが読み込まれると警告が表示されます。
スタック トレースを出力します。このトレースの上部は、 とマークされた行にありXXXXXX
ます。
これが FunctionTemplate を別の FunctionTemplate のメンバーとして定義するための推奨される方法ではない場合、それを達成する正しい方法は何ですか? 何か案は?
c++ - 関数化された module.exports にメソッドを追加する方法
質問。アドオンで機能化するメソッドを追加するにmodule.exports
は?
次のNodeコードを実行したい。
以下はコア C++ コードです。
しかし、それはいくつかのエラーをスローします。
3行目をコメントすると、同じエラーがスローされ続けます。
しかし、3 行目と 4 行目にコメントを付けると、「hello world」と出力されます。
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++ で作成されたオブジェクトを検査するときのノード エラー
nodejs のアドオンとして C++ の (大きな) コードがあります。コードの一部により、モジュールをエクスポートするオブジェクトを検査しようとすると、nodejs が内部的に例外をスローします。
私は少し調査していましたが、私が持っている名前付きプロパティ (またはインターセプター) がこれを実現していることがわかりました。このプロパティのエクスポート オブジェクトのセットをコメント アウトすると、C++ から公開したすべての関数と変数を含むオブジェクトがノードに表示されます。
名前付きプロパティを作成して設定するには、作成したマクロを使用しますが、基本的には次のようにします。
ゲッター関数は、特定の入力に対して数値を返します。それ以外の場合は未定義を返します。その例:
私の質問は、「この問題」を修正し、名前付きプロパティでオブジェクトを検査するときにスローされる例外を回避できるかどうかです。
ノード 6.3.1 と Nan 2.4.0 を使用しています。Linux での問題は、すべて同じように機能するようです。たぶん、これはOS Xでのみ発生します。
この奇妙な動作をテストするには、私のプロジェクトをダウンロードしてビルドし (libFLAC がどこかにインストールされている必要があります)、ノードで次の行を実行してみてください。
関数を含むオブジェクトが表示されている場合はf.load()
、flac ライブラリへのフル パスを指定して呼び出すと、エラーも表示されます。
c++ - 別の Nan::ObjectWrap から Nan::ObjectWrap を返す
私は2つのサブクラスを持っていますNan::ObjectWrap
ZyreEvent
のメソッドから JavaScript オブジェクトを返すにはどうすればよいZyre
ですか?
次のメソッドがあり、次のメソッドを作成しますZyreEvent
。
しかし、保護されたメンバーであるため、zyre_event をラップすることはできませんWrap
。