无法调用bson-ext的本机函数

时间:2016-04-22 03:25:36

标签: node.js npm bson

我使用bson-ext作为本机绑定。

到目前为止,构建本机.node文件效果很好。我安装了GCCmake并运行了node-gyp configurenode-gyp build。我现在将文件包含在我的node应用中,如下所示:

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:非法调用

我在这里感到困惑,因为当我做console.log(object)

输出:

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'}));

但是接受:

  

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

     

TypeError:传入的第一个参数必须是类型数组

然后我跑:

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

并收到:

  

分段错误

1 个答案:

答案 0 :(得分:0)

我在mongodb包中找到了 解决方案。

(特别是在\mongodb\node_modules\mongodb-core\lib\replset.js @ line 15 )。

他们正在使用.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本地,性能结果大致相同......糟糕。