无法加载 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】:
bson 扩展消息只是一个警告,我一直在我的 nodejs 应用程序中得到它。
检查事项:
MongoDB 实例:您有运行 MongoDB 实例吗? 配置:您是否为您的 MongoDB 实例正确配置了 Mongoose?我怀疑您的配置错误,因为错误消息为您的 mongodb 服务器主机名吐出了一个非常奇怪的字符串..【讨论】:
这是有用的信息。这样一来,我发现我将 mongolab 用户帐户信息与数据库的实际 mongodb 用户信息混为一谈。 嗯,我遇到了同样的问题。一切都在我的本地测试服务器上运行,我使用的是 mongoHQ,所以不需要本地 mongo 实例,还有什么问题? 算了,下面 Pradeep 的回答解决了这个问题:)【参考方案2】:如果 bson 扩展不是原因,我猜“连接失败”的另一个原因是用户 ID。所以我创建了一个新数据库并为该数据库添加了一个用户,并为该用户设置了密码(注意:不是 mongolab 帐户密码)。 我更新了我的代码,瞧!有效。对吗? :D
【讨论】:
【参考方案3】:我猜你在安装 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版本正确连接到服务器
窗机呢:(【参考方案4】:
我刚刚解决了。
当你通过 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 实现。【参考方案5】:我已经通过以下方式对在 raspbian(debian for raspberry)上获取“无法加载 c++ bson 扩展”的问题进行了排序:
npm install -g node-gyp
然后
npm update
【讨论】:
我通过运行npm update
解决了我的问题,甚至没有安装任何其他东西。【参考方案6】:
我无法解决这个问题
直到现在。首先,您必须拥有 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
。【参考方案7】:
我也遇到了这个问题,它导致我的会话无法正常工作。但也不要破坏...
我使用了猫鼬连接。
我有这个:
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。
【讨论】:
【参考方案8】:我在我的 EC2 实例上遇到了同样的问题。我认为最初的原因是因为我在安装 Mongo 时运行了一个 Node 实例。我停止了 Node 服务,然后运行了
sudo npm update
在我的节点项目的***文件夹中。这解决了问题,一切都像新的一样
【讨论】:
【参考方案9】:我也遇到了同样的问题,我是 Mac OSX 用户。基本上,您需要确保已安装 Xcode 以及 Xcode 中的“命令行工具”。
Xcode 是免费的,可以在这里下载: https://developer.apple.com/xcode/downloads/
安装 Xcode 后,打开它并单击下拉菜单中的“首选项”,然后单击“下载”图标。确保您已安装“命令行工具”。
然后像上面提到的所有其他用户一样运行以下命令:
rm -rf node_modules
npm cache clean
npm install
【讨论】:
【参考方案10】:所以在我的例子中,我首先尝试在这个目录下检查 /node_modules/mongoose/node_modules/,只是为了确认我有 bson 模块。 我发现我一开始没有它,然后我就跑了
npm install bson
然后
npm 更新
所有都已排序。在 Ubuntu 中尝试和测试。
【讨论】:
也为我工作,但我也在/devel/node_modules/bson/
中输入了make
为我工作。没有清理 npm 缓存。实际上,我所做的只是从 /node_modules/mongoose 运行 npm install bson
【参考方案11】:
一个常见的问题是 node-gyp 需要 Python 2.x,如果您的系统的 python
指向 3.x,它将无法编译 bson
,而不会发出警告。你可以通过在你的 npm 配置中设置一个python
全局键来解决这个问题,它指向你系统上的 2.x 可执行文件。例如,在 Arch Linux 上:
npm config -g set python "/usr/bin/python2"
【讨论】:
【参考方案12】:对我来说只需要在我的 api 目录中运行这些命令:
rm -rf node_modules
npm cache clean
npm install
【讨论】:
【参考方案13】:我正在运行 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。【参考方案14】:这是我在 Ubuntu 上解决问题的方法:
ln -s /usr/bin/nodejs /usr/bin/node
npm install node-gyp
cd node_modules/mongodb/node_modules/bson
node-gyp rebuild
受@mbochynski 回答的启发,但我必须先创建一个符号链接,否则重建失败。
【讨论】:
【参考方案15】:我试图在虚拟机 (vagrant) 共享文件夹上运行节点。那是个问题。我的主机是 Windows,在 Windows 上安装了节点并且像一个魅力一样工作。因此,如果您使用的是虚拟机,请尝试在主机上运行节点服务器。
【讨论】:
【参考方案16】:我通过更改第 10 行来修复它:
/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js
来自:
bson = require('../build/Release/bson');
收件人:
bson = require('bson');
【讨论】:
我猜那是让包使用纯js解决方案 我不是 100% 确定,但我知道这是在避免这种情况。【参考方案17】:我只是遇到了同样的问题,实际上对我没有任何帮助。错误显示kerberos
导致问题,它是mongoose
依赖项之一。由于我在 Ubuntu 上,我认为在全局安装的软件包之间可能存在权限问题 - 在 /usr/lib/node_modules
通过sudo
和用户空间上的软件包。
我在全球范围内安装了mongoose
——当然是sudo
,一切都开始按预期工作。
附: kerberos
软件包现在也全局安装在 mongoose
旁边,但是我不记得我是否故意这样做了——当我试图解决问题时,或者它是否从一开始就存在。
【讨论】:
【参考方案18】:我正在使用 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
【讨论】:
【参考方案19】:我刚刚跑了:
sudo npm install bson
和
sudo npm update
一切都会好起来的。
【讨论】:
你应该非常避免使用 sudo 权限运行 npm。 任何你可以避免在 sudo 空间中的东西,你都应该这样做。我不认为这会导致任何可怕的问题,这只是一个好习惯。这是一篇可能有帮助的文章(除了喜欢 John Papa 之外,不能保证它)。 johnpapa.net/how-to-use-npm-global-without-sudo-on-osx【参考方案20】:对于 Windows 7.1,这些指导帮助我修复了构建环境:
https://github.com/mongodb/js-bson/issues/58#issuecomment-68217275
http://christiankvalheim.com/post/diagnose_installation_problems/
【讨论】:
【参考方案21】:我能够通过卸载并重新安装僧侣包来解决。 初始安装似乎有一个损坏的 mongodb/bson 依赖项。
【讨论】:
【参考方案22】:在 ubuntu 14.04 上,我需要在 /usr/bin
中创建一个链接,因为 /usr/bin/env
正在寻找 /usr/bin/node
。
ln -s /usr/bin/nodejs /usr/bin/node
错误信息可以在每个目录的builderror.log
中找到,所以对于信息:
bson@0.2.21 安装 /usr/local/lib/node_modules/mongodb/node_modules/mongodb-core/node_modules/bson (node-gyp 重建 2> builderror.log) || (0号出口)
查看此文件以获取有关确切问题的更多信息:
/usr/local/lib/node_modules/mongodb/node_modules/mongodb-core/node_modules/bson/builderror.log
【讨论】:
【参考方案23】:很遗憾,以上所有答案都只对了一半。 花了很长时间才弄清楚..
通过 npm 安装 Mongoose bson 会引发警告并导致错误...
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
【参考方案24】:
我在尝试了这么多选项时遇到了同样的问题,但在我的平均应用程序文件夹中的最后一个 npm intall
有效。
【讨论】:
【参考方案25】:我遇到了这个问题,因为我在我的 Git 存储库中包含了 node_modules 文件夹。当我在另一个系统上重建 node_modules 时,它起作用了。其中一个运行 Linux,另一个运行 OS X。也许它们也有不同的处理器架构。
【讨论】:
【参考方案26】:在 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...”——这完全没用,因为它没有解决问题,只是关闭了错误消息。
【讨论】:
【参考方案27】:我在 CentOS 上修复了这个问题
sudo yum groupinstall "开发工具" sudo npm install -g node-gyp rm -r 节点模块 npm 缓存清理 npm 安装【讨论】:
@Theja 说这个错误只发生在 Windows 机器上。【参考方案28】:只是想说我也有错误
Failed to load c++ bson extension, using pure JS version
但没有其他错误。我尝试了所有方法,结果发现我在 package.json 文件中指定的 mongodb 驱动程序与我的 MongoDB 版本不兼容。我将它更改为我的最新版本(1.4.34)并且它有效!!!
【讨论】:
确实 npm install mongodb@latest 为我解决了问题【参考方案29】:就我而言,我在本地机器(Mac)上npm install
所有模块,并且我没有在.gitignore
中包含node_modules
并上传到github。然后我将项目克隆到我的aws,如您所知,它正在运行Linux,所以我得到了错误。我所做的只是在.gitignore
中包含node_modules
,并在我的aws 实例中使用npm install
,然后它就可以工作了。
【讨论】:
【参考方案30】:sudo npm rebuild
为我解决了这个问题。
【讨论】:
以上是关于无法加载 c++ bson 扩展的主要内容,如果未能解决你的问题,请参考以下文章
Openshift 无法加载 c++ bson 扩展/找不到模块('swig')
使用 Mongodb 和 Node.js 无法加载 c++ bson 扩展错误
js-bson:无法加载 c++ bson 扩展,在 Windows 的 mongoose 上使用纯 JS 版本
“错误:%1 不是有效的 Win32 应用程序。安装项目时无法加载 c++ bson 扩展”