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
搜了一大圈,发现这是个普遍存在的问题,不知道有什么解决办法没有?
我单独安装bson模块,发现报错信息:
../ext/bson.cc:4:10: fatal error: 'cstdlib' file not found
#include <cstdlib>
^
1 error generated.
这是否说明错误原因?我查了一下mac下默认是安装了clang的,可为什么还是找不到呢?
@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驱动有问题。
@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.