无法加载 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 进行开发,那么它绝对会改变游戏规则。 gccmakebuild-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 扩展”

运行 mongodb-backed node app 时无法加载 C++ bson 扩展,使用纯 JS 版本错误

尝试加载猫鼬时无法加载c ++ bson扩展[重复]