2016-04-22 21 views
0

私はbson-extをネイティブバインディングとして使用しています。bson-extのネイティブ関数を呼び出せません

ネイティブファイル.nodeのビルドはこれまでのところうまくいきました。私はGCCmakeをインストールし、node-gyp configurenode-gyp buildを実行しました。

var bson = require('./bson/build/Release/bson.node'); 
var object = bson.BSON.prototype; 
console.log(object.serialize('hey')) 

問題がある、私はこのエラーを取得しています:

console.log(object.serialize({test: "turkey"}))

TypeError: Illegal invocation

私はconsole.log(object)

を行うときので、私はここに混乱私は今、そうのように私のnodeアプリでファイルを含めています出力:

BSON { 
calculateObjectSize: [Function: calculateObjectSize], 
serialize: [Function: serialize], 
serializeWithBufferAndIndex: [Function: serializeWithBufferAndIndex], 
deserialize: [Function: deserialize], 
deserializeStream: [Function: deserializeStream] } 

これらは、 C++はbson.nodeに構築されました。しかし、今私はどのようにそれらを呼び出すか分からない。私は彼らのgithubページもドキュメントのためにチェックしましたが、運がありません。

編集:以下:

var bson = require('./bson/build/Release/bson'); 
console.log(bson.BSON) 

出力:

[Function: BSON]

次に、私が実行します。

console.log(bson.BSON().serialize({turkey: 'hey'}));

しかし、REC eive:

console.log(bson.BSON().serialize({turkey: 'hey'}));

TypeError: First argument passed in must be an array of types

それから私は実行します。

console.log(bson.BSON(['BSON']).serialize({turkey: 'hey'})); 

と受信:

Segmentation fault

答えて

0

私はmongodbパッケージ内解決策を見つけました。

(具体的には、\mongodb\node_modules\mongodb-core\lib\replset.js @ line )。

彼らは仕事をして .native()

BSON = require('bson').native().BSON; 
var newBSON = new bson(); 
console.log(newBSON.serialize('hello')); 

を使用している

しかし
<Buffer 32 00 00 00 02 30 00 02 00 00 00 68 00 02 31 00 02 00 00 00 65 00 02 32 00 02 00 00 00 6c 00 02 33 00 02 00 00 00 6c 00 02 34 00 02 00 00 00 6f 00 00> 

、(少しオフトピック、しかし、私は昨日Why is JSON faster than BSON、および結論質問をしましたはネイティブコードと非ネイティブコードですが、今ではbsonをネイティブにインストールした後でも、結果はおおよそ同じです...バマー。

関連する問題