无法加载c++ bson扩展

qfugit 发布于 2019-04-29 dependencies 最后更新 2019-04-29 11:56 111 浏览

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

node app
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)
已邀请:

yautem

赞同来自:

我已经通过以下方式对raspbian(debian for raspberry)获取“无法加载c ++ bson扩展”的问题进行了排序:

npm install -g node-gyp
接着
npm update

jquia

赞同来自:

我也遇到了这个问题,导致我的会话无法正常工作。但不要打破...... 我使用了猫鼬连接。 我有这个:

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。

uid

赞同来自:

我无法解决这个问题 到现在。首先,您必须拥有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
这解决了我的问题。

wet

赞同来自:

我跑了:

sudo npm install bson
sudo npm update
一切都变好了。

tmodi

赞同来自:

我在package.json中将mongodb的版本(编写本文时为2.0.36)更新到最新的,已删除的node_modules文件夹并运行了npm install

kautem

赞同来自:

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

stotam

赞同来自:

在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> builderror.log) || (exit 0)
查看此文件以获取有关确切问题的更多信息 /usr/local/lib/node_modules/mongodb/node_modules/mongodb-core/node_modules/bson/builderror.log

znon

赞同来自:

sudo npm rebuild就是为我修好的。

hiure

赞同来自:

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

taut

赞同来自:

我刚解决了这个问题。 当您通过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模块。

nfugit

赞同来自:

不幸的是,所有上述答案只有一半.. 花了很长时间来搞清楚这一点.. 通过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
这就像魔术一样!

fnam

赞同来自:

以下是我在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的答案,但我必须首先创建一个符号链接,否则重建失败。

kquis

赞同来自:

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

rm -rf node_modules
npm cache clean 
npm install

eea

赞同来自:

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

npm install bson 
接着
npm update
所有都得到了排序。在Ubuntu中进行了测试和测试。

noptio

赞同来自:

我有同样的麻烦尝试了这么多选项,但在我的意思是app文件夹的最后一个npm intall工作。

lquia

赞同来自:

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

zet

赞同来自:

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

ehic

赞同来自:

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

cut

赞同来自:

在我们的例子中,找不到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_proxy和https_proxy环境变量解决了它。

svelit

赞同来自:

我猜你在安装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

uet

赞同来自:

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

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

eomnis

赞同来自:

在WIN 8.1上 好像我在package.json文件中使用了错误版本的mongoose。 我从package.json中删除了行“mongoose”:“^ 3.8.15” CLI: npm install mongoose --save 现在它在package.json中说“mongoose”:“^ 4.0.6”,我的错误消失了。

somnis

赞同来自:

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

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

psunt

赞同来自:

我也遇到了同样的问题,我是Mac OSX用户。基本上,您需要确保已在Xcode中安装了Xcode和“命令行工具”。 Xcode是免费的,可以在这里下载: https://developer.apple.com/xcode/downloads/ 安装Xcode后,打开它并单击下拉菜单中的“首选项”,然后单击“下载”图标。确保安装了“命令行工具”。 然后像上面提到的所有其他用户一样运行以下命令:

rm -rf node_modules
npm cache clean
npm install

kesse

赞同来自:

bson扩展消息只是一个警告,我在nodejs应用程序中一直得到它。 要检查的事项:

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

yeum

赞同来自:

我只是遇到了同样的问题而且对我来说没什么用。错误显示kerberos导致问题,它是mongoose依赖项之一。由于我在Ubuntu上,我认为在全局安装的软件包之间可能存在权限问题 - 在/usr/lib/node_modules中通过sudo,以及在用户空间中。 我全局安装了mongoose - 当然还有sudo,一切都按预期开始工作。 附: kerberos程序包现在也全局安装在mongoose旁边,但是我不记得我是否故意这样做 - 当我试图解决问题时,或者它是否从头开始。

taut

赞同来自:

唯一可以帮助我在Windows 7(x64)上的东西:https://stackoverflow.com/a/29714359/2670121 使用x32版本重新安装node和python。
我花了很多时间来处理这个错误(无法加载c ++ bson扩展),最后,当我安装模块node-gyp(用于构建本机插件)甚至安装了带有visual studio的windows SDK时 - nodejs没有将组装模块bson.node识别为模块。重新安装后问题消失了。 再次,这个错误意味着什么? 实际上,它甚至不是错误。你仍然可以使用猫鼬。但是在这种情况下,你没有快速的原生实现bson模块,而是js-realization,它更慢。我看到了许多提示,例如:“在node_modules内部编辑路径...” - 这完全没用,因为它没有解决问题,只是关闭了错误消息。

hquae

赞同来自:

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

svero

赞同来自:

我正在运行Ubuntu 14.04并为我修复它我必须为节点创建一个符号链接指向nodejs,如下所述: nodejs vs node on ubuntu 12.04 一旦我这样做,我重新运行这些命令:

rm -rf node_modules
npm cache clean
npm install

ased

赞同来自:

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

nin

赞同来自:

只是想说我也有错误

Failed to load c++ bson extension, using pure JS version
但没有其他错误。我尝试了一切,结果发现我在package.json文件中指定的mongodb驱动程序与我的MongoDB版本不兼容。我将它更改为我的最新版本(1.4.34)并且它有效!

matque

赞同来自:

我在CentOS上解决了这个问题

  • sudo yum groupinstall“开发工具”
  • sudo npm install -g node-gyp
  • rm -r node_modules
  • npm cache clean
  • npm install

menim

赞同来自:

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

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

walias

赞同来自:

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

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