无法加载c ++ bson扩展

The*_*eja 184 javascript dependencies mongoose node.js express

这里有一个总节点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)
Run Code Online (Sandbox Code Playgroud)

Pra*_*evu 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
Run Code Online (Sandbox Code Playgroud)

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

npm update
Run Code Online (Sandbox Code Playgroud)

  • 安装build-essential后,"npm update"为我工作 (24认同)
  • 在窗户上怎么样?我的Windows命令提示符C:\ Users\me>节点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版本正确连接到服务器 (8认同)
  • 将`gcc`和`make`与`build-essential`一起安装的原因是什么?后者取决于其他两个,所以无论如何它们都将被安装(http://packages.ubuntu.com/trusty/build-essential).做'sudo apt-get install build-essential`就足够了. (3认同)
  • +1.我所要做的就是最后3行 - 我认为我没有建造的原因是因为它是作为'mongoskin`模块的一部分而来的. (2认同)
  • 哇!那个``sudo apt-get install gcc make build-essential``技巧是我见过的最好的Node.js + Ubuntu开发技巧之一.如果您习惯于开发Web应用程序并且只是在Ubuntu上使用Node.js进行开发,那么这是一个绝对的游戏改变者. (2认同)

小智 99

我刚解决了这个问题.

当您通过npm安装mongoose模块时,它的文件夹中没有内置的bson模块.在文件中node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js,更改行

bson = require('../build/Release/bson');
Run Code Online (Sandbox Code Playgroud)

bson = require('bson');
Run Code Online (Sandbox Code Playgroud)

然后使用npm安装bson模块.

  • 改变node_modules目录中的内容是个好主意吗?这似乎很脆弱 (36认同)
  • 这是一个黑客,而不是修复. (23认同)
  • 这不是解决方案.使用相同的结果,您可以删除打印错误的字符串.出现此错误是因为找不到bson的本机c ++插件,在这种情况下无论如何都将使用js实现. (10认同)
  • @DouglasFerguson不是真的.如果您编辑node_module,我建议通过npm/bower分配repo并安装修改后的模块. (6认同)
  • 这个答案有效.Mongoose的开发者,请解决这个问题! (4认同)

Dan*_*nia 36

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

npm install -g node-gyp
Run Code Online (Sandbox Code Playgroud)

然后

npm update
Run Code Online (Sandbox Code Playgroud)

  • 我只是通过运行`npm update`解决了我的问题,甚至没有安装任何其他东西. (3认同)

mbo*_*ski 26

我无法解决这个问题

到现在.首先,您必须拥有Pradeep Mahdevu提到的系统包.那些是:

xcode-select --install (on a mac) 
Run Code Online (Sandbox Code Playgroud)

要么

sudo apt-get install gcc make build-essential (on ubuntu)
Run Code Online (Sandbox Code Playgroud)

然后我安装了node-gyp

npm install -g node-gyp 
Run Code Online (Sandbox Code Playgroud)

就像datadracer所说的那样,但他建议的npm更新也是有风险的.它更新所有模块,这可能是危险的(有时版本之间的API更改).

我建议进入node_modules/mongodb/node_modules/bson目录并从那里使用

node-gyp rebuild
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题.

  • 那个窗户怎么样:( (5认同)

nev*_*fox 19

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

npm config -g set python "/usr/bin/python2"
Run Code Online (Sandbox Code Playgroud)


Oak*_*Oak 18

在WIN 8.1上

好像我在package.json文件中使用了错误版本的mongoose.

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

CLI:npm install mongoose --save

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


Ant*_*ony 10

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

ubuntu 12.04上的nodejs vs node

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

rm -rf node_modules
npm cache clean
npm install
Run Code Online (Sandbox Code Playgroud)


the*_*kle 8

只是想说我也有错误

Failed to load c++ bson extension, using pure JS version
Run Code Online (Sandbox Code Playgroud)

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


小智 7

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

npm install bson 

然后

npm update

所有都得到了排序.在Ubuntu中进行了测试和测试.


Zac*_*ahl 7

sudo npm rebuild 是什么修复它为我.


小智 7

我终于通过在package.json中将我的mongodb依赖版本更新为"~2.0.36"来纠正此错误.

 "dependencies": {
    "consolidate": "~0.9.1",
    "express": "3.x",
    "mongodb": "~2.0.36",
    "mongoose": "^4.1.12"
  }
Run Code Online (Sandbox Code Playgroud)


小智 5

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

通过 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
Run Code Online (Sandbox Code Playgroud)

这就像魔法一样!!


hen*_*wan 3

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

需要检查的事项:

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