这里有一个总节点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)
答案 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应用程序中一直得到它。
要检查的事项:
答案 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上的这个问题答案 17 :(得分:1)
我遇到了这个问题,因为我在我的Git存储库中包含了 node_modules 文件夹。当我在另一个系统上重建 node_modules 时,它工作了。其中一个是运行Linux,另一个是OS X.也许他们也有不同的处理器架构。
答案 18 :(得分:1)
我遇到了同样的问题尝试了很多选项,但在我的平均应用文件夹的最后npm intall
工作。
答案 19 :(得分:1)
以下是我如何解决Ubuntu上的问题:
ln -s /usr/bin/nodejs /usr/bin/node
npm install node-gyp
cd node_modules/mongodb/node_modules/bson
node-gyp rebuild
受到@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)
对于Windows 7.1,这些说明帮助我修复了构建环境:
https://github.com/mongodb/js-bson/issues/58#issuecomment-68217275
http://christiankvalheim.com/post/diagnose_installation_problems/
答案 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