我通过一个非常简单的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
任何帮助将不胜感激!!!!
答案 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无法知道要下载哪个源代码树以匹配您已安装的内容。