无法加载c ++ bson扩展,使用纯JS版本 - 没有mongoose,没有express,只是节点驱动程序

时间:2014-06-26 21:46:03

标签: node.js mongodb

我通过一个非常简单的mongodb教程,在其中我们使用mongo shell创建数据库,创建一个集合,然后编写一个非常简单的nodejs程序来访问集合并将文档记录到控制台。

var mongodb = require('mongodb');

var db = new mongodb.Db('mcfly', new mongodb.Server('127.0.0.1', 27017), {safe: true});

db.open(function(err) {
  db.collection('mathpeeps', function(err, collection){
    collection.find().toArray(function(err, items){
  console.log(items)
    });
  });
});

但是当我运行该程序时,它给了我:

js-bson: Failed to load c++ bson extension, using pure JS version
[ { _id: 53ab29bbdb49942ae25b5201,
    firstname: 'Leonard',
    lastname: 'Euler',
    born: 1707 },
  { _id: 53ab29fedb49942ae25b5202,
    firstname: 'Karl',
    lastname: 'Gauss' } ]

我用Google搜索并搜索了“js-bson:无法加载c ++ bson扩展,使用纯JS版本”并尝试了除了对其他人无效的答案或以mongoose问题为中心的答案之外的所有内容我没有在这个练习中使用猫鼬。

到目前为止我尝试过的一些事情:

sudo apt-get install gcc make build-essential
rm -rf node_modules
npm cache clean
npm install

(但本练习甚至不使用package.json文件)


我尝试使用最新版本重新安装node-mongodb


我试过

npm install -g node-gyp

我在SO Failed to load c++ bson extension尝试了答案:

进入node_modules / mongodb / node_modules / bson目录并从那里使用

node-gyp rebuild

那产生了:

gyp info it worked if it ends with ok
gyp info using node-gyp@0.13.1
gyp info using node@0.11.9-pre | linux | x64
gyp ERR! configure error 
gyp ERR! stack Error: "pre" versions of node cannot be installed, use the --nodedir flag     instead
gyp ERR! stack     at install (/usr/local/lib/node_modules/node-    gyp/lib/install.js:66:16)
gyp ERR! stack     at Object.self.commands.(anonymous function) [as install]     (/usr/local/lib/node_modules/node-gyp/lib/node-gyp.js:66:37)
gyp ERR! stack     at getNodeDir (/usr/local/lib/node_modules/node-    gyp/lib/configure.js:152:20)
gyp ERR! stack     at /usr/local/lib/node_modules/node-gyp/lib/configure.js:95:9
gyp ERR! stack     at ChildProcess.exithandler (child_process.js:659:7)
gyp ERR! stack     at ChildProcess.EventEmitter.emit (events.js:106:17)
gyp ERR! stack     at maybeClose (child_process.js:773:16)
gyp ERR! stack     at Socket.<anonymous> (child_process.js:986:11)
gyp ERR! stack     at Socket.EventEmitter.emit (events.js:103:17)
gyp ERR! stack     at Pipe.close (net.js:458:12)
gyp ERR! System Linux 3.13.0-29-generic
gyp ERR! command "node" "/usr/local/bin/node-gyp" "rebuild"
gyp ERR! cwd /home/nathaniel/node_modules/mongodb/node_modules/bson
gyp ERR! node -v v0.11.9-pre
gyp ERR! node-gyp -v v0.13.1
gyp ERR! not ok 

我在这里看到了一个SO答案Failed to load c++ bson extension, using pure JS version说:

“当您使用npm安装bson模块时,听起来没有安装gcc / g ++ / make / python 2.x。请先尝试安装它们然后使用npm重新安装bson。”

但这个答案并没有被选为解决方案,我不知道这意味着什么,因为我是一个严肃的菜鸟。


我真的想继续学习mongodb,但是我不想让一些包bug导致问题,让我错误地认为我做错了。我真的希望现在能够解决这个问题。

我也注意到许多其他人发布此问题(没有猫鼬或明确的参与)没有选择答案或回答他们已经解决了这个问题。

我正在运行Ubuntu 14.04 LTS和节点v0.11.9-pre

任何帮助将不胜感激!!!!

1 个答案:

答案 0 :(得分:2)

我认为错误非常明确:Error: "pre" versions of node cannot be installed, use the --nodedir flag instead。因此,您应该提供从安装节点的根节点源目录的路径,或者安装/使用实际节点版本(v0.11.13是最新的不稳定版本,v0.10.29是最新的稳定版本)在撰写本文时发布)并再次尝试npm install / node-gyp rebuild

它要求节点源目录的原因是因为node-gyp必须从nodejs.org站点下载节点源tarball才能编译插件(它需要C ++头文件等)。但是,如果您的节点版本是预发行版,则node-gyp无法知道要下载哪个源代码树以匹配您已安装的内容。