无法加载 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 进行开发,那么它绝对会改变游戏规则。 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版本正确连接到服务器 窗机呢:(【参考方案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 扩展”

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

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