Failed to load c++ bson extension, using pure JS version
发布于 1年前 作者 kazaff 5596 次浏览

node v0.10.25 ├─┬ mongoose@3.8.7 │ ├── hooks@0.2.1 │ ├─┬ mongodb@1.3.23 │ │ ├── bson@0.2.5 │ │ └── kerberos@0.0.3 │ ├── mpath@0.1.1 │ ├── mpromise@0.4.3 │ ├─┬ mquery@0.5.2 │ │ └── debug@0.7.4 │ ├── ms@0.1.0 │ ├── muri@0.3.1 │ ├── regexp-clone@0.0.1 │ └── sliced@0.0.5

测试代码: var mongoose = require(‘mongoose’); mongoose.connect(‘mongodb://localhost/test’);

var Cat = mongoose.model('Cat', { name: String });

var kitty = new Cat({ name: 'Zildjian' });
kitty.save(function (err) {
  if (err) // ...
   console.log('meow');
});

执行代码,可以插入到mongodb中,只不过在控制台会报个警告:

Failed to load c++ bson extension, using pure JS version

搜了一大圈,发现这是个普遍存在的问题,不知道有什么解决办法没有?

8 回复

我单独安装bson模块,发现报错信息:

../ext/bson.cc:4:10: fatal error: 'cstdlib' file not found
#include <cstdlib>
         ^
1 error generated.

这是否说明错误原因?我查了一下mac下默认是安装了clang的,可为什么还是找不到呢?

遇到了同样的问题。 我是在Node-webkit环境里用mongoose的。

功能一切正常,只是会在console里报这样的错。

楼主找到解决办法了吗?

没有,虽然知道这个只是个警告,但是还是很恶心啊~~

github上也有不少人问,但是并没找到明确的一个解答~

@kazaff pure js环境下一切功能还是可以正常运行的。 作为有强迫症的我,还是做了点小伎俩把那个警告给取消了。 打开文件夹 ...\node_modules\mongoose\node_modules\mongodb\node_modules\bson\ext 下的index.js文件,把第13行的 console.error("Failed to load c++ bson extension, using pure JS version");给注释掉,或者就直接用pure js环境 bson = require('../lib/bson/bson');不需要上面各种平台的判断。

github上有人说是mongodb官方的bson驱动有问题。

@Just1n 小伙儿果然够狠啊

@kazaff 需要用nw-gyp rebuild 一下。 然后把ext文件夹下的index.js文件里的bson = require('./win32/ia32/bson');bson = require('./win32/x64/bson'); 全部换成 bson = require('../build/Release/bson'); ,主要是nw-gyp编译的时候没有分32位和64位。

注,目前只对我遇到问题的环境有效: Windows8.1 VS2013 node v0.10.26 node-webkit 0.9.2 mongoose

已经解决了: http://stackoverflow.com/posts/22242472/revisions 这个主要是通过 npm install mongoose 时,mongoose 并没有编译 bson, 引起的,通过 npm install bson 就会编译它,并个性 mongoose 中对应的引用代码即可。 按上面给出方式修改后就可以了

I just resolved that.

When you installed the mongoose module by npm, it hasn’t build bson module within it’s forlder. see the file ‘node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js’

bson = require(‘…/build/Release/bson’);

So just change it to bson = require(‘bson’);

and install bson module by npm.

回到顶部