无法加载c ++ bson扩展

时间:2014-02-09 07:15:52

标签: javascript node.js express mongoose dependencies

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

  

节点应用

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)

35 个答案:

答案 0 :(得分:200)

我猜你在安装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 :(得分:100)

我刚刚解决了这个问题。

当您按照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模块。

答案 2 :(得分:36)

我已经解决了获取&#34;无法加载c ++ bson扩展的问题&#34;在raspbian(debian for raspberry)上:

npm install -g node-gyp

然后

npm update

答案 3 :(得分:26)

我无法解决这个问题

直到现在。首先,您必须拥有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_modules / mongodb / node_modules / bson 目录并从那里使用

node-gyp rebuild

这解决了我的问题。

答案 4 :(得分:19)

一个常见问题是node-gyp需要Python 2.x,如果你的系统python指向3.x,它将无法编译bson,而不会发出警告。您可以通过在npm配置中设置python全局密钥来解决此问题,该密钥指向系统上的2.x可执行文件。例如,在Arch Linux上:

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

答案 5 :(得分:18)

在WIN 8.1上

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

我从package.json

中删除了行“mongoose”:“^ 3.8.15”

CLI: npm install mongoose --save

现在它说“mongoose”:package.json中的“^ 4.0.6”,我的错误消失了。

答案 6 :(得分:10)

我正在运行Ubuntu 14.04并为我修复它我必须为节点创建一个符号链接,指向 nodejs ,如下所述:

nodejs vs node on ubuntu 12.04

一旦我这样做了,我重新运行了这些命令:

rm -rf node_modules
npm cache clean
npm install

答案 7 :(得分:8)

只是想说我也有错误

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

但没有其他错误。我尝试了一切,结果我在package.json文件中指定的mongodb驱动程序与我的MongoDB版本不兼容。我将它更改为我的最新版本(1.4.34)并且它工作了!!!

答案 8 :(得分:7)

所以在我的情况下,我首先尝试检查此目录下的 / node_modules / mongoose / node_modules / ,只是为了确认我有 bson 模块。 我发现我首先没有它,然后我就跑了

npm install bson 

然后

npm update

所有人都进行了排序。在Ubuntu中进行了测试和测试。

答案 9 :(得分:7)

sudo npm rebuild是我修复它的原因。

答案 10 :(得分:7)

我终于通过将我的mongodb依赖版本更新为&#34; ~2.0.36&#34;来纠正了这个错误。在package.json。

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

答案 11 :(得分:4)

不幸的是,所有上述答案只有一半...... 花了很长时间来解决这个问题..

通过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

这就像魔术一样!!

答案 12 :(得分:3)

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

rm -rf node_modules
npm cache clean 
npm install

答案 13 :(得分:3)

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

要检查的事项:

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

答案 14 :(得分:3)

我跑了:

sudo npm install bson

sudo npm update

一切都变好了。

答案 15 :(得分:2)

我也遇到了这个问题,导致我的会话无法正常工作。但是不要打破......

我使用了猫鼬连接。

我有这个:

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。

答案 16 :(得分:2)

我通过

修复了CentOS上的这个问题
  • sudo yum groupinstall“开发工具”
  • sudo npm install -g node-gyp
  • rm -r node_modules
  • npm cache clean
  • npm install

答案 17 :(得分:1)

我遇到了这个问题,因为我在我的Git存储库中包含了 node_modules 文件夹。当我在另一个系统上重建 node_modules 时,它工作了。其中一个是运行Linux,另一个是OS X.也许他们也有不同的处理器架构。

答案 18 :(得分:1)

我遇到了同样的问题尝试了很多选项,但在我的平均应用文件夹的最后npm intall工作。

答案 19 :(得分:1)

以下是我如何解决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
  5. 受到@mbochynski答案的启发,但我必须先创建一个符号链接,否则重建失败。

答案 20 :(得分:1)

我修改了/更改/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js的第10行:

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

为:

bson = require('bson');

答案 21 :(得分:1)

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

sudo npm update 

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

答案 22 :(得分:0)

对于我的情况,我npm install我本地计算机上的所有模块(Mac),我没有在.gitignore中包含node_modules并上传到github。然后我将项目克隆到我的aws,如你所知,它正在运行Linux,所以我得到了错误。我所做的只是在.gitignore中包含node_modules,并在我的aws实例中使用npm install,然后它就可以了。

答案 23 :(得分:0)

在我们的例子中,找不到c ++版本bson的原因是因为我们是公司代理的后面,而BSON构建过程中的某些东西需要伸出来获取文件。当我们查看node_modules / bson / builder错误.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_proxy和https_proxy环境变量解决了它。

答案 24 :(得分:0)

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

答案 25 :(得分:0)

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

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

答案 26 :(得分:0)

只需在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'); 

这就是全部!!!

答案 27 :(得分:0)

唯一可以帮助我使用Windows 7(x64):https://stackoverflow.com/a/29714359/2670121

使用x32版本重新安装node和python 我花了很多时间来处理这个错误(无法加载c ++ bson扩展),最后,当我安装模块node-gyp(用于构建本机插件)甚至安装了带有visual studio的windows SDK时 - nodejs无法识别已组装的模块bson .node作为模块。重新安装后,问题就消失了。

同样,这个错误是什么意思?

实际上,它甚至不是错误。你仍然可以使用猫鼬。但是在这种情况下,你得到的是js-realization,而不是bson模块的快速原生实现。我看到了许多提示,例如:“在node_modules内部编辑路径...” - 这完全没用,因为它没有解决问题,只是关闭了错误消息。

答案 28 :(得分:0)

在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_modules / mongodb / node_modules / mongodb-core / node_modules / bson   (node-gyp rebuild 2&gt; builderror.log)|| (退出0)

查看此文件以获取有关确切问题的更多信息

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

答案 29 :(得分:0)

我可以通过卸载并重新安装monk包来解决。 初始安装似乎有一个损坏的mongodb / bson依赖。

答案 30 :(得分:0)

答案 31 :(得分:0)

我遇到了同样的问题,实际上没有任何对我有用的东西。错误显示kerberos导致问题,它是mongoose依赖项之一。由于我在Ubuntu上,我认为全局安装的软件包之间可能存在权限问题 - /usr/lib/node_modules通过sudo,以及用户空间。

我在全球范围内安装了mongoose - 当然是sudo,所有内容都按预期开始工作。

P.S。 kerberos软件包现在也全局安装在mongoose旁边,但我无法记住我是否故意这样做 - 当我试图解决问题时,或者它是否来自一开始。

答案 32 :(得分:0)

我试图在虚拟机(vagrant)共享文件夹上运行节点。那是一个问题。我的主机是Windows,安装在Windows上的节点,就像一个魅力。因此,如果您使用的是虚拟机,只需尝试在主机上运行节点服务器。

答案 33 :(得分:0)

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

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

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

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

rm -rf node_modules
npm cache clean
npm install

答案 34 :(得分:0)

如果bson扩展不是原因,我猜测“连接失败”的另一个原因是用户ID。所以我创建了一个新的数据库并为数据库添加了一个用户,其中包含该用户的密码(注意:不是mongolab帐户密码)。 我更新了我的代码和瞧!有效。对吧? :d