无法加载 c++ bson 扩展
Posted
技术标签:
【中文标题】无法加载 c++ bson 扩展【英文标题】:Failed to load c++ bson extension 【发布时间】:2014-03-06 13:22:30 【问题描述】:这里是一个总节点菜鸟。我一直在尝试设置示例节点应用程序,但每次尝试运行时都会弹出以下错误:
节点应用
Failed to load c++ bson extension, using pure JS version
events.js:72
throw er; // Unhandled 'error' event
^
Error: failed to connect to [#$%67890 :27017]
at null.<anonymous> (/home/thejazeto/code/nodejs/authen/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:553:74)
at EventEmitter.emit (events.js:106:17)
at null.<anonymous> (/home/thejazeto/code/nodejs/authen/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:140:15)
at EventEmitter.emit (events.js:98:17)
at Socket.<anonymous> (/home/thejazeto/code/nodejs/authen/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection.js:512:10)
at Socket.EventEmitter.emit (events.js:95:17)
at net.js:830:16
at process._tickCallback (node.js:415:13)
【问题讨论】:
错误是failed to connect to
,所以我认为bson
消息可能无关,实际上并不重要。你确定你的 Mongo 连接设置正确吗?
有趣的故事我只在 Windows 机器上收到此错误...尚未尝试安装 node-gyp 但我尝试了几乎所有其他方法但仍然收到错误。并且 chocoletey 不会安装构建要素
现在的 JS BSON 代码不是几乎和 C++ 一样快了吗?如果是这样,这真的是个问题吗?
对于遇到此问题的新 iojs 用户,我已开票跟踪此问题:github.com/mongodb/js-bson/issues/136
注意:我使用 Keystone.js 作为我的 mvc 框架。对我来说,您将“../build/Release/bson”更改为“../browser_build/bson”。如果你上去,你会看到 browser_build 文件夹。
【参考方案1】:
我猜你在安装 mongodb 库时没有可用的 make 工具。我建议你这样做
xcode-select --install
(在 Mac 上)
或sudo apt-get install gcc make build-essential
(在 ubuntu 上)
然后运行
rm -rf node_modules
npm cache clean
npm install
或者只是基于@tobias 评论的 npm 更新(在安装 build-essential 之后)
npm update
【讨论】:
+1。我所要做的就是最后 3 行 - 我认为我没有构建我的原因是因为它是mongoskin
模块的一部分。
哇! sudo apt-get install gcc make build-essential
技巧是我见过的最好的 Node.js + Ubuntu 开发技巧之一。如果您习惯于开发 Web 应用程序并且只是在 Ubuntu 上使用 Node.js 进行开发,那么它绝对会改变游戏规则。
gcc
和make
与build-essential
一起安装的原因是什么?后者取决于其他两个,因此无论如何都会安装它们(packages.ubuntu.com/trusty/build-essential)。做sudo apt-get install build-essential
就足够了。
在windows上怎么样??我在 Windows 命令提示符 C:\Users\me>node C:\Users\me\Desktop\nodeproject\datagen.js [错误:找不到模块 '../build/Release/bson' ] 代码:'MODULE_NOT_FOUND' js-bson:无法加载 c++ bson 扩展,使用纯 JS 版本 [错误:找不到模块 '../build/Release/bson'] 代码:'MODULE_NOT_FOUND' js-bson:加载c++ bson扩展失败,使用纯js版本正确连接到服务器
窗机呢:(【参考方案2】:
我刚刚解决了。
当你通过 npm 安装 mongoose 模块时,它的文件夹中没有内置的 bson 模块。在文件node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js
中,改行
bson = require('../build/Release/bson');
到
bson = require('bson');
然后使用 npm 安装 bson 模块。
【讨论】:
更改 node_modules 目录中的内容是个好主意吗?这似乎很脆弱 @DouglasFerguson 不是。如果您编辑 node_module,我建议您分叉 repo 并通过 npm/bower 安装修改后的模块。 这个答案有效。 Mongoose 的开发人员,请修复此问题! 这是一个 hack,而不是修复。 这不是解决方案。使用相同的结果,您可以删除打印错误的字符串。出现此错误是因为找不到 bson 的原生 c++ 插件,在这种情况下无论如何都会使用 js 实现。【参考方案3】:我已经通过以下方式对在 raspbian(debian for raspberry)上获取“无法加载 c++ bson 扩展”的问题进行了排序:
npm install -g node-gyp
然后
npm update
【讨论】:
我通过运行npm update
解决了我的问题,甚至没有安装任何其他东西。【参考方案4】:
我无法解决这个问题
直到现在。首先,您必须拥有 Pradeep Mahdevu 提到的系统包。它们是:
xcode-select --install (on a mac)
或
sudo apt-get install gcc make build-essential (on ubuntu)
然后我已经安装了node-gyp
npm install -g node-gyp
就像 datadracer 说的,但他也建议 npm update 是有风险的。它更新所有模块,这可能很危险(有时版本之间的 API 更改)。
我建议进入 node_modules/mongodb/node_modules/bson 目录并从那里使用
node-gyp rebuild
这为我解决了问题。
【讨论】:
windows 怎么样 :( @JamieHutber 安装 VS 2013 我在 512MB RP1 上发布了 DietPi。只是想提一下,我必须安装 Python (apt-get install python
),然后在 node_modules/mongoose/node_modules/mongodb/node_modules/bson/
中运行 make
。这创建了Release/bson.node
。【参考方案5】:
一个常见的问题是 node-gyp 需要 Python 2.x,如果您的系统的 python
指向 3.x,它将无法编译 bson
,而不会发出警告。你可以通过在你的 npm 配置中设置一个python
全局键来解决这个问题,它指向你系统上的 2.x 可执行文件。例如,在 Arch Linux 上:
npm config -g set python "/usr/bin/python2"
【讨论】:
【参考方案6】:在 WIN 8.1 上
我的package.json
文件中似乎使用了错误版本的猫鼬。
我从package.json
中删除了"mongoose" : "^3.8.15"
行。
CLI:
npm install mongoose --save
现在它在package.json
中显示"mongoose": "^4.0.6"
,并且我遇到的错误消失了。
【讨论】:
谢谢!你把我从无数小时的敲键盘头中解救了出来。这是在 Windows 上工作的最后也是唯一的解决方案。问题是我正在运行 3.x 版的 mongoose,它似乎与我电脑上安装的最新 mongodb 不兼容。 这终于让我也能在 Ubuntu 上运行了。 是的,也可以在 Mac 上运行。谢谢! 非常感谢!继微软的“你有文档!MongoDB Jump Start”培训课程之后,出现了同样的错误,只与 mongodb 包有关 - 为那个做了上述步骤,果然,它现在正在运行! :)【参考方案7】:我正在运行 Ubuntu 14.04,要为我修复它,我必须为 node 创建一个符号链接以指向 nodejs,如下所述:
nodejs vs node on ubuntu 12.04
一旦我这样做了,我就重新运行了这些命令:
rm -rf node_modules
npm cache clean
npm install
【讨论】:
伟大的安东尼!我也在 Ubuntu 14.04 上运行,你的建议为我解决了这个问题。仅安装 build-essential 并重新安装所有内容是不够的:我还必须添加“节点”ln。【参考方案8】:所以在我的例子中,我首先尝试在这个目录下检查 /node_modules/mongoose/node_modules/,只是为了确认我有 bson 模块。 我发现我一开始没有它,然后我就跑了
npm install bson
然后
npm 更新
所有都已排序。在 Ubuntu 中尝试和测试。
【讨论】:
也为我工作,但我也在/devel/node_modules/bson/
中输入了make
为我工作。没有清理 npm 缓存。实际上,我所做的只是从 /node_modules/mongoose 运行 npm install bson
【参考方案9】:
只是想说我也有错误
Failed to load c++ bson extension, using pure JS version
但没有其他错误。我尝试了所有方法,结果发现我在 package.json 文件中指定的 mongodb 驱动程序与我的 MongoDB 版本不兼容。我将它更改为我的最新版本(1.4.34)并且它有效!!!
【讨论】:
确实 npm install mongodb@latest 为我解决了问题【参考方案10】:sudo npm rebuild
为我解决了这个问题。
【讨论】:
【参考方案11】:我终于通过在package.json
中将我的 mongodb 依赖版本更新为 ~2.0.36 来纠正此错误。
"dependencies":
"consolidate": "~0.9.1",
"express": "3.x",
"mongodb": "~2.0.36",
"mongoose": "^4.1.12"
【讨论】:
我的有点相关,我使用的是 mongod,而不是 mobgodb。【参考方案12】:不幸的是,以上所有答案都只对了一半。 花了很长时间才弄清楚..
Mongoose bson install via npm 抛出警告并导致错误...
npm install -g node-gyp
git clone https://github.com/mongodb/js-bson.git
cd js-bson
npm install
node-gyp rebuild
这就像魔术一样!
【讨论】:
这失败并出现错误:$ node gyp rebuild module.js:341 throw err; ^ Error: Cannot find module '/private/tmp/js-bson/gyp' at Function.Module._resolveFilename (module.js:339:15) at Function.Module._load (module.js:290:25) at Function.Module.runMain (module.js:447:10) at startup (node.js:140:18) at node.js:1001:3
【参考方案13】:
对我来说只需要在我的 api 目录中运行这些命令:
rm -rf node_modules
npm cache clean
npm install
【讨论】:
【参考方案14】:我刚刚跑了:
sudo npm install bson
和
sudo npm update
一切都会好起来的。
【讨论】:
你应该非常避免使用 sudo 权限运行 npm。 任何你可以避免在 sudo 空间中的东西,你都应该这样做。我不认为这会导致任何可怕的问题,这只是一个好习惯。这是一篇可能有帮助的文章(除了喜欢 John Papa 之外,不能保证它)。 johnpapa.net/how-to-use-npm-global-without-sudo-on-osx【参考方案15】:bson 扩展消息只是一个警告,我一直在我的 nodejs 应用程序中得到它。
检查事项:
MongoDB 实例:您有运行 MongoDB 实例吗? 配置:您是否为您的 MongoDB 实例正确配置了 Mongoose?我怀疑您的配置错误,因为错误消息为您的 mongodb 服务器主机名吐出了一个非常奇怪的字符串..【讨论】:
这是有用的信息。我发现我将 mongolab 用户帐户信息与数据库的实际 mongodb 用户信息混为一谈。 嗯,我遇到了同样的问题。一切都在我的本地测试服务器上运行,我使用的是 mongoHQ,所以不需要本地 mongo 实例,还有什么问题? 算了,下面 Pradeep 的回答解决了这个问题:)【参考方案16】:我在 CentOS 上修复了这个问题
sudo yum groupinstall "开发工具" sudo npm install -g node-gyp rm -r 节点模块 npm 缓存清理 npm 安装【讨论】:
@Theja 说这个错误只发生在 Windows 机器上。【参考方案17】:我通过更改第 10 行来修复它:
/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js
来自:
bson = require('../build/Release/bson');
收件人:
bson = require('bson');
【讨论】:
我猜那是让包使用纯js解决方案 我不是 100% 确定,但我明白这正是在避免这种情况。【参考方案18】:我也遇到了这个问题,它导致我的会话无法正常工作。但也不要破坏...
我使用了猫鼬连接。
我有这个:
var mongoose = require('mongoose');
var express = require('express');
var cookieParser = require('cookie-parser');
var expressSession = require('express-session');
var MongoStore = require('connect-mongo')(expressSession);
...
var app = express();
app.set('port', process.env.PORT || 8080);
app.use(bodyParser);
mongoose.connect('mongodb://localhost/TEST');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback ()
console.log('MongoDB connected');
);
app.use(cookieParser());
app.use(expressSession(
secret: 'mysecret',
cookie:
maxAge: null,
expires: moment().utc().add('days',10).toDate(),// 10 dagen
,
store: new MongoStore(
db: 'TEST',
collection: 'sessions',
),
非常简单。但 req.session 始终为空。
rm -rf node_modules
npm cache clean
npm install
成功了。注意你的 package.json 中没有“mongodb”!只是 Mongoose 和 connect-mongo。
【讨论】:
【参考方案19】:这是我在 Ubuntu 上解决问题的方法:
ln -s /usr/bin/nodejs /usr/bin/node
npm install node-gyp
cd node_modules/mongodb/node_modules/bson
node-gyp rebuild
受@mbochynski 回答的启发,但我必须先创建一个符号链接,否则重建失败。
【讨论】:
【参考方案20】:我在尝试了这么多选项时遇到了同样的问题,但在我的平均应用程序文件夹中的最后一个 npm intall
有效。
【讨论】:
【参考方案21】:我遇到了这个问题,因为我在我的 Git 存储库中包含了 node_modules 文件夹。当我在另一个系统上重建 node_modules 时,它起作用了。其中一个运行 Linux,另一个运行 OS X。也许它们也有不同的处理器架构。
【讨论】:
【参考方案22】:我在我的 EC2 实例上遇到了同样的问题。我认为最初的原因是因为我在安装 Mongo 时运行了一个 Node 实例。我停止了 Node 服务,然后运行了
sudo npm update
在我的节点项目的***文件夹中。这解决了问题,一切都像新的一样
【讨论】:
【参考方案23】:我试图在虚拟机 (vagrant) 共享文件夹上运行节点。那是个问题。我的主机是 Windows,在 Windows 上安装了节点并且像一个魅力一样工作。因此,如果您使用的是虚拟机,请尝试在主机上运行节点服务器。
【讨论】:
【参考方案24】:我只是遇到了同样的问题,实际上对我没有任何帮助。错误显示 kerberos
导致问题,它是 mongoose
依赖项之一。由于我在 Ubuntu 上,我认为在全局安装的软件包之间可能存在权限问题 - 在 /usr/lib/node_modules
通过sudo
和用户空间上的软件包。
我在全球范围内安装了mongoose
——当然是sudo
,一切都开始按预期工作。
附: kerberos
软件包现在也全局安装在 mongoose
旁边,但是我不记得我是否故意这样做了——当我试图解决问题时,或者它是否从一开始就存在。
【讨论】:
【参考方案25】:我正在使用 centOS 7 开发 Docker,遇到了同样的问题。
环顾四周,并多次尝试后,我通过安装 mongodb 和 mongodb-server 解决了这个问题
yum install mongodb mongodb-server
我认为这不是制作最小容器的最佳方式。但我可以将范围限制在以下包中
==============================================================================================================
Package Arch Version Repository Size
==============================================================================================================
Installing:
mongodb x86_64 2.6.5-2.el7 epel 57 M
mongodb-server x86_64 2.6.5-2.el7 epel 8.7 M
Installing for dependencies:
boost-filesystem x86_64 1.53.0-18.el7 base 66 k
boost-program-options x86_64 1.53.0-18.el7 base 154 k
boost-system x86_64 1.53.0-18.el7 base 38 k
boost-thread x86_64 1.53.0-18.el7 base 56 k
gperftools-libs x86_64 2.1-1.el7 epel 267 k
libpcap x86_64 14:1.5.3-3.el7_0.1 updates 137 k
libunwind x86_64 1.1-3.el7 epel 61 k
snappy x86_64 1.1.0-3.el7 base 40 k
【讨论】:
【参考方案26】:对于 Windows 7.1,这些指导帮助我修复了构建环境:
https://github.com/mongodb/js-bson/issues/58#issuecomment-68217275
http://christiankvalheim.com/post/diagnose_installation_problems/
【讨论】:
【参考方案27】:我能够通过卸载并重新安装僧侣包来解决。 初始安装似乎有一个损坏的 mongodb/bson 依赖项。
【讨论】:
【参考方案28】:Followint @user1548357 我决定更改模块文件本身。为了避免下面的有效 cmets 指出的问题,我将我的更改包含在一个安装后脚本中,以便我可以设置它并忘记它,并确保它会在我的模块安装后运行。
// package.json
"scripts":
// other scripts
"postinstall": "node ./bson.fix.js"
,
脚本是:
// bson.fix.js
var fs = require('fs');
var file = './node_modules/bson/ext/index.js'
fs.readFile(file, 'utf8', function (err,data)
if (err)
return console.log(err);
var result = data.replace(/\.\.\/build\/Release\/bson/g, 'bson');
fs.writeFile(file, result, 'utf8', function (err)
if (err) return console.log(err);
console.log('Fixed bson module so as to use JS version');
);
);
【讨论】:
【参考方案29】:只需在 try 和 catch 块中添加此行即可轻松解决问题
路径:node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js
bson = require('bson'); instead
bson = require('./win32/ia32/bson');
bson = require('../build/Release/bson');
就是这样!!!
【讨论】:
您好,感谢您的回答。请对代码示例使用格式,以便人们阅读。【参考方案30】:在 Windows 7 (x64) 上唯一对我有帮助的东西:https://***.com/a/29714359/2670121
使用 x32 版本重新安装 node 和 python。 我花了很多时间处理这个错误:
加载 c++ bson 扩展失败
最后,当我安装模块 node-gyp
(用于构建本机插件)甚至安装带有 Visual Studio 的 Windows SDK 时,nodejs 无法将组装模块 bson.node
识别为模块。重装后问题消失了。
再次,这个错误是什么意思?
实际上,这甚至不是错误。你仍然可以使用猫鼬。但在这种情况下,不是快速原生实现 bson
模块,而是获得了速度较慢的 js-realization
。
我看到了很多提示,例如:“edit path deep inside node_modules...”——这完全没用,因为它没有解决问题,只是关闭了错误消息。
【讨论】:
以上是关于无法加载 c++ bson 扩展的主要内容,如果未能解决你的问题,请参考以下文章
Openshift 无法加载 c++ bson 扩展/找不到模块('swig')
使用 Mongodb 和 Node.js 无法加载 c++ bson 扩展错误
js-bson:无法加载 c++ bson 扩展,在 Windows 的 mongoose 上使用纯 JS 版本
“错误:%1 不是有效的 Win32 应用程序。安装项目时无法加载 c++ bson 扩展”