我使用bson-ext作为本机绑定。
到目前为止,构建本机.node
文件效果很好。我安装了GCC
,make
并运行了node-gyp configure
和node-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'}));
并收到:
分段错误
答案 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
本地,性能结果大致相同......糟糕。