加载 c + + bson 扩展失败

一个节点菜鸟。我一直在尝试设置一个示例节点应用程序,但是每次尝试运行时都会出现以下错误:

节点应用程序

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)
185186 次浏览

Bson 扩展消息只是一个 警告,我一直在我的 nodejs 应用程序中得到它。

需要检查的事项:

  • MongoDB 实例 : 是否运行 MongoDB 实例?
  • Config : 您是否正确地将 Mongoose 配置为 MongoDB 实例?我怀疑您的配置是错误的,因为错误消息为您的 mongodb 服务器主机名输出了一个非常奇怪的字符串。.

如果 bson 扩展不是原因,我猜“连接失败”的另一个原因是用户 ID。因此,我创建了一个新的数据库,并为该数据库添加了一个用户,并为该用户设置了密码(纸条: 不是 mongolab 帐户密码)。 我更新了我的代码,瞧! 成功了,对吧? : D

我猜测您在安装 mongodb 库时没有 make 工具可用

(在 Mac 上) 或者 sudo apt-get install gcc make build-essential(在 ubuntu 上)

然后逃跑

rm -rf node_modules
npm cache clean
npm install

或者只是基于@Tobias 注释的 npm 更新(在安装 build-basic 之后)

npm update

我刚解决了这个问题。

当您按 npm 安装猫鼬模块时,它的文件夹中没有构建的 bson 模块。在 node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js文件中,更改行

bson = require('../build/Release/bson');

bson = require('bson');

然后使用 npm 安装 bson 模块。

我已经把在 raspbian (debian 的意思是覆盆子)上获得“加载 c + + bson 扩展失败”的问题进行了分类:

npm install -g node-gyp

然后

npm update

我无法解决这个问题

首先,你必须有 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 更新也建议他是危险的。它更新所有模块,这可能是危险的(有时 API 在不同版本之间发生变化)。

我建议进入 Node _ module/mongodb/node _ module/bson目录并从那里使用

node-gyp rebuild

解决了我的问题。

我也有这个问题,它导致我的会议不工作。但不休息,无论是..。

我用了猫鼬的关系。

我有这个:

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

成功了,小心你的包里没有“ mongob”json! 只有猫鼬和连接-mongo。

我的 EC2实例也有同样的问题。我认为最初的原因是因为在安装 Mongo 时运行了一个 Node 实例。我停止了 Node 服务,然后运行

sudo npm update

在我的节点项目的顶级文件夹中。这样问题就解决了,一切都像新的一样

我也遇到了同样的问题,我是一个 Mac OSX 用户。基本上,您需要确保已经在 Xcode 中安装了 Xcode 和“命令行工具”。

Xcode 是免费的,可以从这里下载: Https://developer.apple.com/xcode/downloads/

安装完 Xcode 后,打开它,在下拉菜单中单击“首选项”,然后单击“下载”图标。确保您已经安装了“命令行工具”。

然后像上面提到的所有其他用户一样运行以下命令:

rm -rf node_modules
npm cache clean
npm install

因此在我的例子中,我首先尝试检查这个目录 /node _ module/monose/node _ module/,只是为了确认我有 Bson模块。 我发现我一开始就没有,然后我就跑了

npm install bson 

and then

npm update

都搞定了,在 Ubuntu 里试过了。

一个常见的问题是 node-gyp 需要 Python 2.x,如果系统的 python指向3.x,它将无法在没有警告的情况下编译 bson。可以通过在 npm 配置中设置指向系统上2.x 可执行文件的 python全局键来解决这个问题。例如,在 Arch Linux 上:

npm config -g set python "/usr/bin/python2"

对我来说,只需要在 api 目录中运行这些命令:

rm -rf node_modules
npm cache clean
npm install

我正在运行 Ubuntu 14.04,为了解决这个问题,我不得不为 节点创建一个指向 Nodejs的符号链接,如下所述:

Nodejs vs ubuntu 12.04上的节点

完成后,我重新运行这些命令:

rm -rf node_modules
npm cache clean
npm install

下面是我在 Ubuntu 上解决这个问题的方法:

  1. ln -s /usr/bin/nodejs /usr/bin/node
  2. npm install node-gyp
  3. cd node_modules/mongodb/node_modules/bson
  4. node-gyp rebuild

受@mbochynski 答案的启发,但我必须先创建一个符号链接,否则重建就失败了。

我试图在虚拟机(流浪者)共享文件夹上运行节点。这是个问题。我的主机是 Windows,在 Windows 上安装了节点,工作起来非常出色。因此,如果您正在使用虚拟机,只需尝试在主机上运行节点服务器。

我修改了第10行:

/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js

来自:

bson = require('../build/Release/bson');

致:

bson = require('bson');

我也遇到过同样的问题,但是没有一样对我有用。错误是显示 kerberos是导致问题的原因,它是 mongoose依赖项之一。因为我在 Ubuntu 上,所以我认为在全局安装的软件包(通过 sudo/usr/lib/node_modules中安装)和那些在用户空间中安装的软件包之间可能存在许可问题。

我在全球范围内安装了 mongoose——当然是使用 sudo,一切都按照预期开始工作。

附言。kerberos软件包现在也在全球范围内安装在 mongoose的旁边,但是我不记得我是故意这样做的——当我试图解决这个问题时,还是从一开始就在那里。

我正在用 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

我就跑了:

sudo npm install bson

还有

sudo npm update

一切都会好起来。

我可以通过卸载和重新安装 monk 软件包来解决这个问题。 最初的安装似乎有一个损坏的 mongodb/bson 依赖项。

在 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 install/usr/local/lib/node _ module/mongodb/node _ module/mongodb-core/node _ module/bson (node-gyp build 2 > builderror.log) | | (exit 0)

查看这个文件可以获得更多关于确切问题的信息:

/usr/local/lib/node_modules/mongodb/node_modules/mongodb-core/node_modules/bson/builderror.log

不幸的是,以上所有的答案只对了一半。 花了很长时间才弄明白。

猫鼬 bson 安装通过 npm 抛出警告,并导致错误..。

npm install -g node-gyp


git clone https://github.com/mongodb/js-bson.git
cd js-bson
npm install
node-gyp rebuild

这真是太神奇了!

我有同样的麻烦尝试了这么多选项,但在最后的 npm intall在我的意思应用程序文件夹工作。

我之所以有这个问题,是因为我在 Git 存储库中包含了 Node _ module文件夹。当我在另一个系统上重建 Node _ module的时候,它起作用了。其中一个运行 Linux,另一个运行 OS X。也许他们也有不同的处理器架构。

在 Windows7(x64)上唯一对我有帮助的是: https://stackoverflow.com/a/29714359/2670121

使用 x32版本重新安装节点和 python。
我花了很多时间在这个错误上:

加载 c + + bson 扩展失败

最后,当我安装模块 node-gyp(用于构建本地插件) ,甚至安装带有 Visual Studio-nodejs 的窗口 SDK 时,不能识别组装的模块 bson.node作为一个模块。重新安装之后,问题就消失了。

再问一次,这个错误是什么意思?

事实上,这甚至不是错误。你还可以用猫鼬。但是在这种情况下,bson模块没有快速本地实现,取而代之的是比较慢的 js-realization

我看到了很多提示,比如: “ edit path deep inside node _ module...”-这完全没用,因为它不能解决问题,只是关闭了错误消息。

我在 CentOS 上修复了这个问题

  • Sudo yum groupinstall “Development Tools”
  • sudo npm install -g node-gyp
  • rm -r node_modules
  • npm cache clean
  • npm install

我只是想说我也犯了错误

Failed to load c++ bson extension, using pure JS version

但是没有其他的错误。我尝试了所有方法,结果发现我在 package.json 文件中指定的 MongoDB 驱动程序与我的 MongoDB 版本不兼容。我把它改成了我最新的版本(1.4.34) ,它起作用了! ! !

对于我的情况,我在本地机器(Mac)上使用 npm install所有模块,而且我没有在 .gitignore中包含 node_modules并上传到 github。然后我把这个项目复制到我的 aws,你知道,它是运行 Linux 的,所以我得到了错误。我所做的只是在 .gitignore中包含 node_modules,并在我的 aws 实例中使用 npm install,然后它就可以工作了。

sudo npm rebuild帮我修好的。

WIN 8.1

似乎我在 package.json文件中使用了一个错误的 mongoose 版本。

我从 package.json中删除了线 "mongoose" : "^3.8.15"

CLI:

npm install mongoose --save

现在它说 package.json中的 "mongoose": "^4.0.6"和我的错误已经消失了。

最后,我通过将 mongodb 依赖版本更新为 package.json中的 ~ 2.0.36来纠正这个错误。

 "dependencies": {
"consolidate": "~0.9.1",
"express": "3.x",
"mongodb": "~2.0.36",
"mongoose": "^4.1.12"
}

在我们的例子中,没有找到 c + + 版本的 BSON 的原因是因为我们在一个公司代理的后面,而且 BSON 构建过程中的某些东西需要主动获取文件。当我们查看 node_modules/bson/builderror.log时,我们看到了这样一个错误:

gyp WARN install got an error, rolling back install
gyp ERR! configure error
gyp ERR! stack Error: connect ECONNREFUSED
gyp ERR! stack     at errnoException (net.js:904:11)
gyp ERR! stack     at Object.afterConnect [as oncomplete] (net.js:895:19)

设置 http_proxyhttps_proxy环境变量解决了这个问题。

Followint@user1548357我决定修改模块文件本身。为了避免下面的有效注释指出的问题,我在安装后脚本中包含了我的更改,这样我就可以设置它并忘记它,并确保它在安装模块时运行。

// 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');
});
});

通过添加 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');

仅此而已!