无法加载 c++ bson 扩展

IT技术 javascript node.js express mongoose dependencies
2021-01-22 21:16:49

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

节点应用

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)
6个回答

我猜您在安装 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
什么是安装的原因gcc,并make连同build-essential后者取决于其他两个,因此无论如何它们都会被安装(packages.ubuntu.com/trusty/build-essential)。sudo apt-get install build-essential应该就够了。
2021-03-21 21:16:49
+1。我所要做的就是最后 3 行——我认为我没有建造的原因是因为它是mongoskinmodule的一部分
2021-03-26 21:16:49
哇!这个sudo apt-get install gcc make build-essential技巧是我见过的最好的 Node.js + Ubuntu 开发技巧之一。如果您习惯于开发 Web 应用程序并且只是在 Ubuntu 上使用 Node.js 进行开发,那么它绝对会改变游戏规则。
2021-03-29 21:16:49
窗户机器呢:(
2021-04-03 21:16:49
在窗户上怎么样??我在 Windows 命令提示符 C:\Users\me>node C:\Users\me\Desktop\nodeproject\datagen.js { [错误:找不到module '../build/Release/bson' ] 代码:'MODULE_NOT_FOUND'} js-bson:无法加载 c++ bson 扩展,使用纯 JS 版本 { [错误:找不到module '../build/Release/bson'] 代码:'MODULE_NOT_FOUND'} js-bson:无法加载 c++ bson 扩展,使用纯 JS 版本正确连接到服务器
2021-04-04 21:16:49

我刚刚解决了那个。

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

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

bson = require('bson');

然后使用 npm 安装 bson module。

这不是解决方案。使用相同的结果,您可以删除打印错误的字符串。出现此错误是因为找不到 bson 的本机 c++ 插件,在这种情况下,无论如何都会使用 js 实现。
2021-03-23 21:16:49
更改 node_modules 目录中的内容是个好主意吗?那看起来很脆
2021-03-30 21:16:49
这个答案奏效了。Mongoose 的开发人员,请解决这个问题!
2021-03-30 21:16:49
@DouglasFerguson 不是。如果您编辑 node_module,我建议分叉 repo 并通过 npm/bower 安装修改后的module。
2021-04-06 21:16:49
这是一个黑客,而不是一个修复。
2021-04-10 21:16:49

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

npm install -g node-gyp

接着

npm update
我只是通过运行解决了我的问题npm update,甚至没有安装任何其他东西。
2021-04-04 21:16:49

我无法解决这个问题

到目前为止。首先,您必须拥有 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 是有风险的。它更新所有module,这可能是危险的(有时版本之间的 API 更改)。

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

node-gyp rebuild

那为我解决了问题。

@JamieHutber 安装 VS 2013
2021-03-13 21:16:49
我是在512MB RP1上发布的DietPi这样做的只是想提到我必须安装Python ( apt-get install python),然后从node_modules/mongoose/node_modules/mongodb/node_modules/bson/run 中安装make这创造了Release/bson.node.
2021-03-15 21:16:49
窗户呢:(
2021-03-17 21:16:49

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

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