可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
A total node noob here. I\'ve been trying to set up a sample node app but the following error keeps popping up every time I try to run:
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)
回答1:
I guess you did not have the make tools available when you installed your mongodb library. I suggest you do
xcode-select --install
(on a mac)
or sudo apt-get install gcc make build-essential
(on ubuntu)
and run
rm -rf node_modules
npm cache clean
npm install
OR just npm update based on @tobias comment (after installing build-essential)
npm update
回答2:
I just resolved that.
When you install the mongoose module by npm, it does not have a built bson module in it\'s folder. In the file node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js
, change the line
bson = require(\'../build/Release/bson\');
to
bson = require(\'bson\');
and then install the bson module using npm.
回答3:
I have sorted the issue of getting the \"Failed to load c++ bson extension\" on raspbian(debian for raspberry) by:
npm install -g node-gyp
and then
npm update
回答4:
I was unable to solve this
until now. First of all you have to have system packages mentioned by Pradeep Mahdevu. Those are:
xcode-select --install (on a mac)
or
sudo apt-get install gcc make build-essential (on ubuntu)
Then I\'ve installed node-gyp
npm install -g node-gyp
like datadracer said but npm update also suggested by him is risky. It update all modules, which can be dangerous (sometimes API changes between versions).
I suggest going into node_modules/mongodb/node_modules/bson directory and from there use
node-gyp rebuild
That solved the problem for me.
回答5:
A common problem is that node-gyp requires Python 2.x and if your system\'s python
points to 3.x, it will fail to compile bson
, without warning. You can fix this by setting a python
global key in your npm config that points to the 2.x executable on your system. For example, on Arch Linux:
npm config -g set python \"/usr/bin/python2\"
回答6:
On WIN 8.1
It seems I used a wrong version of mongoose in my package.json file.
I removed the line \"mongoose\" : \"^3.8.15\" from package.json
CLI:
npm install mongoose --save
Now it says \"mongoose\": \"^4.0.6\" in package.json and the error I had is gone.
回答7:
I\'m running Ubuntu 14.04 and to fix it for me I had to create a symlink for node to point to nodejs as described here:
nodejs vs node on ubuntu 12.04
Once I did that I re-ran these commands:
rm -rf node_modules
npm cache clean
npm install
回答8:
just wanted to say I also had the error
Failed to load c++ bson extension, using pure JS version
But with none of the other errors. I tried everything and turns out the mongodb drivers that I was specifying in the package.json file was incompatible with my version of MongoDB. I changed it to my latest version which was (1.4.34) and it worked!!!
回答9:
So in my case, I first tried to check under this directory /node_modules/mongoose/node_modules/, just to confirm that I have the bson module.
I figured out that I did not have it in the first place, then I just run
npm install bson
and then
npm update
All got sorted.Tried and tested in Ubuntu.
回答10:
sudo npm rebuild
was what fixed it for me.
回答11:
I finally corrected this error by updating my mongodb dependency version to\"~2.0.36\" in package.json.
\"dependencies\": {
\"consolidate\": \"~0.9.1\",
\"express\": \"3.x\",
\"mongodb\": \"~2.0.36\",
\"mongoose\": \"^4.1.12\"
}
回答12:
Unfortunately, All the above answers are only half right..
Took a long time to figure this out..
Mongoose bson install via npm throws warning and causes the error...
npm install -g node-gyp
git clone https://github.com/mongodb/js-bson.git
cd js-bson
npm install
node-gyp rebuild
This works like magic!!
回答13:
The bson extension message is just a warning, I get it all the time in my nodejs application.
Things to check:
- MongoDB instance: Do you have a MongoDB instance running?
- Config: Did you correctly configure Mongoose to your MongoDB instance? I suspect your config is wrong, because the error message spits out a very weird string for your mongodb server host name..
回答14:
For me it only take to run these commands in my api directory:
rm -rf node_modules
npm cache clean
npm install
回答15:
I just ran:
sudo npm install bson
and
sudo npm update
and all become ok.
回答16:
I also got this problem and it caused my sessions not to work. But not to break either...
I used a mongoose connection.
I had this:
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\',
}),
Very straightforward. But req.session stayed always empty.
rm -rf node_modules
npm cache clean
npm install
Did the trick. Watch out you dont have a \'mongodb\' in your package.json! Just Mongoose and connect-mongo.
回答17:
I fixed this problem on CentOS by
- sudo yum groupinstall \"Development Tools\"
- sudo npm install -g node-gyp
- rm -r node_modules
- npm cache clean
- npm install
回答18:
I had the same problem on my EC2 instance. I think the initial cause was because I had a Node instance running when I installed Mongo. I stopped the Node service and then ran
sudo npm update
inside of the top level folder of my node project. This fixed the problem and everything was just like new
回答19:
Here\'s how I fixed the problem on Ubuntu:
ln -s /usr/bin/nodejs /usr/bin/node
npm install node-gyp
cd node_modules/mongodb/node_modules/bson
node-gyp rebuild
Inspired by @mbochynski answer, but I had to create a symbolic link first, otherwise the rebuild failed.
回答20:
I fixed it changing line 10 of /node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js from:
bson = require(\'../build/Release/bson\');
to:
bson = require(\'bson\');
回答21:
i was having same trouble tried so many options but in the last npm intall
in my mean app folder worked.
回答22:
I had this problem because I was including the node_modules folder in my Git repository. When I rebuilt the node_modules on the other system it worked. One of them was running Linux, the other OS X. Maybe they had different processor architectures as well.
回答23:
If the bson extension wasn\'t the reason, I guessed the other reason for \"failed to connect\" would be the user id\'s. So I created a new database and added a user for the database, with a password for that user (note: not mongolab account password).
I updated those on my code and voila! It worked. Duh right? :D
回答24:
I also encountered the same problem and I\'m a Mac OSX user. Basically, you need to make sure you have installed the Xcode and also the \"Command Line Tools\" within the Xcode.
Xcode is free and can be downloaded over here:
https://developer.apple.com/xcode/downloads/
After you have installed the Xcode, open it and click \"Preference\" in the pull down menu, and click the \"Downloads\" icon. Make sure you have the \"Command Line Tools\" installed.
Then run the following commands like all the other users mentioned above:
rm -rf node_modules
npm cache clean
npm install
回答25:
I was trying to run node on virtual machine (vagrant) shared folder. That was a problem. My host machine is Windows, installed node on Windows and worked like a charm. So if you are using virtual machine, just try to run node server on host machine.
回答26:
I just had the same problem and literally nothing worked for me. The error was showing kerberos
is causing the problem and it was one of the mongoose
dependencies. Since I\'m on Ubuntu, I thought there might be permission issues somewhere between the globally installed packages -- in /usr/lib/node_modules
via sudo
, and those which are on the user space.
I installed mongoose
globally -- with sudo
of course, and everything began working as expected.
P.S. The kerberos
package now also is installed globally next to mongoose
, however I can\'t remember if I did it deliberately -- while I was trying to solve the problem, or if it was there from the beginning.
回答27:
I\'m working on Docker with centOS 7, and encountered the same problem.
after looking around, and make several tries, I fixed this problem by installing mongodb, and mongodb-server
yum install mongodb mongodb-server
I don\'t think this is the best way to produce the minimal container. but I can limit the scope into the following packages
==============================================================================================================
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
回答28:
For Windows 7.1, these directions helped me to fix my build environment:
https://github.com/mongodb/js-bson/issues/58#issuecomment-68217275
http://christiankvalheim.com/post/diagnose_installation_problems/
回答29:
I was able to resolve by uninstalling and reinstalling monk package.
Initial install seemingly had a corrupt mongodb/bson dependency.
回答30:
on ubuntu 14.04 I needed to create a link in /usr/bin because /usr/bin/env was looking for /usr/bin/node
ln -s /usr/bin/nodejs /usr/bin/node
The error messages can be found in the builderror.log in each directory so for the message:
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)
look at this file for more information about the exact problem
/usr/local/lib/node_modules/mongodb/node_modules/mongodb-core/node_modules/bson/builderror.log