Fehler beim Laden der c ++ bson-Erweiterung

185

Ein Total Node Noob hier. Ich habe versucht, eine Beispielknoten-App einzurichten, aber der folgende Fehler tritt jedes Mal auf, wenn ich versuche, ihn auszuführen:

Knoten 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)
Theja
quelle
3
Der Fehler ist failed to connect to, also denke ich, dass die bsonNachricht möglicherweise nicht in Beziehung steht und eigentlich keine Rolle spielt. Sind Sie sicher, dass Ihre Mongo-Verbindungseinstellungen korrekt sind?
Loganfsmyth
1
Lustige Geschichte Ich bekomme diesen Fehler nur auf einem Windows-Computer ... habe nicht versucht, Node-Gyp zu installieren, aber ich habe fast alles andere versucht und bekomme immer noch den Fehler. und Chocoletey wird Build Essentials nicht installieren
Snymax
Ist der JS BSON-Code jetzt nicht fast so schnell wie der C ++? Wenn ja, ist das wirklich ein Problem?
UpTheCreek
Für Leute auf neueren Iojs, bei denen dieses Problem auftritt, habe ich ein Ticket geöffnet, um dieses Problem zu verfolgen: github.com/mongodb/js-bson/issues/136
bitinn
Hinweis: Ich verwende Keystone.js als mein MVC-Framework. Für mich ändern Sie "../build/Release/bson" in "../browser_build/bson". Wenn Sie nach oben gehen, sehen Sie den Ordner browser_build.
Pranay Pant

Antworten:

201

Ich denke, Sie hatten nicht die Make-Tools zur Verfügung, als Sie Ihre Mongodb-Bibliothek installiert haben. Ich schlage vor, Sie tun

xcode-select --install (auf einem Mac) oder sudo apt-get install gcc make build-essential (auf Ubuntu)

und Renn

rm -rf node_modules
npm cache clean
npm install

ODER einfach npm Update basierend auf @tobias Kommentar (nach der Installation von build-essential)

npm update
Pradeep Mahdevu
quelle
2
+1. Alles was ich tun musste waren die letzten 3 Zeilen - ich denke, der Grund, warum meine nicht gebaut wurden, war, dass sie Teil des mongoskinModuls war.
Matt Browne
2
Beeindruckend! Dieser sudo apt-get install gcc make build-essentialTipp ist einer der besten Node.js + Ubuntu-Entwicklungstipps, die ich je gesehen habe. Es ist ein absoluter Game-Changer, wenn Sie es gewohnt sind, Webanwendungen zu entwickeln und nur mit Node.js unter Ubuntu zu entwickeln.
Charney Kaye
3
Was ist der Grund für die Installation gccund makezusammen mit build-essential? Letzteres hängt von den beiden anderen ab, sodass sie trotzdem installiert werden ( packages.ubuntu.com/trusty/build-essential ). Tun sudo apt-get install build-essentialsollte genug sein.
Sergey
8
Wie wäre es mit Windows? Ich erhalte so etwas an meiner Windows-Eingabeaufforderung C: \ Benutzer \ ich> Knoten C: \ Benutzer \ me \ Desktop \ Knotenprojekt \ datagen.js {[Fehler: Modul '../build/Release/bson' kann nicht gefunden werden ' ] code: 'MODULE_NOT_FOUND'} js-bson: Fehler beim Laden der c ++ bson-Erweiterung mit der reinen JS-Version {[Fehler: Modul '../build/Release/bson' kann nicht gefunden werden] Code: 'MODULE_NOT_FOUND'} js-bson: Fehler beim Laden der c ++ bson-Erweiterung unter Verwendung der reinen JS-Version.
Richtig
1
Was ist mit Fenstermaschinen :(
Jamie Hutber
100

Ich habe das gerade gelöst.

Wenn Sie das Mungo-Modul mit npm installieren, befindet sich kein integriertes bson-Modul im Ordner. node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.jsÄndern Sie in der Datei die Zeile

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

zu

bson = require('bson');

und installieren Sie dann das bson-Modul mit npm.

user1548357
quelle
36
Ist es eine gute Idee, Dinge im Verzeichnis node_modules zu ändern? Das scheint spröde
Douglas Ferguson
6
@ DouglasFerguson Nicht wirklich. Wenn Sie ein node_module bearbeiten, würde ich vorschlagen, das Repo zu verzweigen und Ihr modifiziertes Modul über npm / bower zu installieren.
Christopher Marshall
4
Diese Antwort hat funktioniert. Entwickler bei Mongoose, bitte beheben Sie dies!
Steve K
23
Dies ist ein Hack, kein Fix.
Ashesh
10
Dies ist keine Lösung. Mit dem gleichen Ergebnis können Sie einfach Zeichenfolgen entfernen, die Fehler drucken. Dieser Fehler tritt auf, weil das native c ++ - Plugin für bson nicht gefunden wurde. In diesem Fall wird die Realisierung trotzdem verwendet.
Alendorff
36

Ich habe das Problem, dass die Erweiterung "Fehler beim Laden der C ++ - Bson-Erweiterung" auf raspbian (Debian für Himbeere) behoben wurde, folgendermaßen sortiert:

npm install -g node-gyp

und dann

npm update
Daniele Urania
quelle
3
Ich habe mein Problem einfach durch Ausführen gelöst npm update, ohne etwas anderes zu installieren.
MalcolmOcean
27

Ich konnte das nicht lösen

bis jetzt. Zunächst müssen Sie Systempakete haben, die von Pradeep Mahdevu erwähnt werden. Jene sind:

xcode-select --install (on a mac) 

oder

sudo apt-get install gcc make build-essential (on ubuntu)

Dann habe ich Node-Gyp installiert

npm install -g node-gyp 

Wie Datadracer sagte, aber das von ihm vorgeschlagene npm-Update ist riskant. Es aktualisiert alle Module, was gefährlich sein kann (manchmal API-Änderungen zwischen Versionen).

Ich schlage vor, in das Verzeichnis node_modules / mongodb / node_modules / bson zu gehen und von dort aus zu verwenden

node-gyp rebuild

Das hat das Problem für mich gelöst.

mbochynski
quelle
5
Was ist mit Windows :(
Jamie Hutber
@ JamieHutber Installieren Sie VS 2013
Rahil Wazir
Ich habe dies bei einer Veröffentlichung von DietPi auf einem 512 MB RP1 getan. Ich wollte nur erwähnen, dass ich Python ( apt-get install python) installieren und dann von innen node_modules/mongoose/node_modules/mongodb/node_modules/bson/ausführen musste make. Dies erstellt Release/bson.node.
Staticboy
20

Ein häufiges Problem ist, dass Node-Gyp Python 2.x benötigt. Wenn Ihr System pythonauf 3.x zeigt, kann es bsonohne Vorwarnung nicht kompiliert werden. Sie können dies beheben, indem Sie pythonin Ihrer npm-Konfiguration einen globalen Schlüssel festlegen , der auf die auf Ihrem System ausführbare 2.x-Datei verweist. Zum Beispiel unter Arch Linux:

npm config -g set python "/usr/bin/python2"
Neverfox
quelle
19

Auf WIN 8.1

Anscheinend habe ich in meiner package.jsonDatei eine falsche Version von Mungo verwendet.

Ich habe die Zeile "mongoose" : "^3.8.15"von entfernt package.json.

CLI:

npm install mongoose --save

Jetzt heißt es "mongoose": "^4.0.6"in package.jsonund der Fehler, den ich hatte, ist weg.

Eiche
quelle
Danke dir! Sie haben mich vor unzähligen Stunden Kopfschlag auf der Tastatur bewahrt. Dies war die letzte und einzige Lösung, die unter Windows funktioniert hat. Das Problem war, dass ich eine Version 3.x von Mungo ausführte, die mit der neuesten Mongodb-Installation auf meinem PC nicht kompatibel zu sein schien.
ChallengeAccepted
Dies brachte mich schließlich auch auf Ubuntu zum Laufen.
Jason Kennaly
Ja, läuft auch auf dem Mac. Vielen Dank!
Jos
Vielen Dank! Befolgen Sie die Microsoft-Schulungssitzung "Sie haben Dokumente! Ein MongoDB-Starthilfe" und hatten Sie den gleichen Fehler, der sich nur auf das Mongodb-Paket bezog. Führen Sie die obigen Schritte für dieses aus, und es läuft jetzt! :)
Fernando Madruga
11

Ich verwende Ubuntu 14.04 und um es für mich zu beheben, musste ich einen Symlink erstellen, damit der Knoten auf NodeJS zeigt, wie hier beschrieben:

nodejs vs node auf ubuntu 12.04

Sobald ich das getan habe, habe ich diese Befehle erneut ausgeführt:

rm -rf node_modules
npm cache clean
npm install
Anthony
quelle
Großer Anthony! Ich laufe auch unter Ubuntu 14.04 und Ihr Vorschlag hat das Problem für mich gelöst. Es reicht nicht aus, build-essential zu installieren und alles neu zu installieren: Ich musste auch den 'node' ln hinzufügen.
Franco
8

In meinem Fall habe ich zuerst versucht, in diesem Verzeichnis / node_modules / mongoose / node_modules / nachzuschauen , um zu bestätigen, dass ich das bson- Modul habe. Ich fand heraus, dass ich es überhaupt nicht hatte, dann rannte ich einfach

npm install bson 

und dann

npm Update

Alle wurden sortiert. In Ubuntu getestet und getestet.

Steven
quelle
arbeitete auch für mich, aber ich tippte auch makeein/devel/node_modules/bson/
exebook
1
Hat für mich gearbeitet. Das Bereinigen des npm-Caches hat nicht funktioniert. Eigentlich war alles, was ich getan habe, von / node_modules / mongoose rannpm install bson
RichieRich
8

Ich wollte nur sagen, dass ich auch den Fehler hatte

Failed to load c++ bson extension, using pure JS version

Aber mit keinem der anderen Fehler. Ich habe alles versucht und es stellte sich heraus, dass die Mongodb-Treiber, die ich in der Datei package.json angegeben habe, nicht mit meiner Version von MongoDB kompatibel waren. Ich habe es auf meine neueste Version geändert, die (1.4.34) war und es hat funktioniert !!!

die Gurke
quelle
in der Tat npm installieren mongodb @ spätestens für mich das Problem gelöst
tam.teixeira
8

sudo npm rebuild war das, was es für mich behoben hat.

Zach Dahl
quelle
8

Ich habe diesen Fehler endlich behoben, indem ich meine Mongodb-Abhängigkeitsversion auf ~ 2.0.36 in aktualisiert habe package.json.

 "dependencies": {
    "consolidate": "~0.9.1",
    "express": "3.x",
    "mongodb": "~2.0.36",
    "mongoose": "^4.1.12"
  }
Feezy23
quelle
Meins war etwas im Zusammenhang, ich wurde mit mongod und nicht mobgo db .
Brad B
5

Leider sind alle oben genannten Antworten nur zur Hälfte richtig. Es hat lange gedauert, dies herauszufinden.

Die Installation von Mongoose bson über npm löst eine Warnung aus und verursacht den Fehler ...

npm install -g node-gyp

git clone https://github.com/mongodb/js-bson.git
cd js-bson
npm install
node-gyp rebuild

Das funktioniert wie Magie !!

Rama Prashanth
quelle
Dies schlägt mit Fehler fehl:$ node gyp rebuild module.js:341 throw err; ^ Error: Cannot find module '/private/tmp/js-bson/gyp' at Function.Module._resolveFilename (module.js:339:15) at Function.Module._load (module.js:290:25) at Function.Module.runMain (module.js:447:10) at startup (node.js:140:18) at node.js:1001:3
Thomas Modeneis
4

Für mich dauert es nur, diese Befehle in meinem API-Verzeichnis auszuführen:

rm -rf node_modules
npm cache clean 
npm install
Adam Gądziak
quelle
4

Ich bin gerade gelaufen:

sudo npm install bson

und

sudo npm update

und alles wird ok.

V. Kovpak
quelle
Sie sollten es sehr vermeiden, npm mit sudo-Rechten auszuführen.
Loganhuskins
Alles, was Sie vermeiden können, im Sudo-Raum zu haben, sollten Sie tun. Ich denke nicht, dass es irgendwelche schlimmen Probleme verursachen wird, es ist nur eine gute Praxis. Hier ist ein Artikel, der helfen kann (kann nicht dafür bürgen, außer John Papa zu mögen). johnpapa.net/how-to-use-npm-global-without-sudo-on-osx
Loganhuskins
3

Die bson-Erweiterungsnachricht ist nur eine Warnung . Ich erhalte sie ständig in meiner nodejs-Anwendung.

Dinge zu überprüfen:

  • MongoDB-Instanz : Wird eine MongoDB-Instanz ausgeführt?
  • Config : Haben Sie Mongoose korrekt für Ihre MongoDB-Instanz konfiguriert? Ich vermute, Ihre Konfiguration ist falsch, weil die Fehlermeldung eine sehr seltsame Zeichenfolge für den Hostnamen Ihres Mongodb-Servers ausspuckt.
Hendrikswan
quelle
Das waren nützliche Informationen. Damit stellte ich fest, dass ich die Informationen zum Mongolab-Benutzerkonto mit den tatsächlichen Informationen zum Mongodb-Benutzer für die Datenbank verwechselte.
Theja
Hmm, ich habe das gleiche Problem. Auf meinem lokalen Testserver funktionierte jedoch alles und ich verwende mongoHQ. Ich brauche also keine lokale mongo-Instanz. Was könnte sonst noch schief gehen?
Karoh
Vergiss das,
Pradeeps
3

Ich habe dieses Problem unter CentOS von behoben

  • sudo yum groupinstall "Entwicklungstools"
  • sudo npm install -g node-gyp
  • rm -r Knotenmodule
  • npm Cache sauber
  • npm installieren
Liudong
quelle
@ Theja sagte, dass der Fehler nur auf Windows-Computer auftritt.
Pawel Veselov
3

Ich habe es behoben, indem ich Zeile 10 von geändert habe:

/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js 

von:

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

zu:

bson = require('bson');
jorgefpastor
quelle
3
Das macht das Paket zu einer reinen js-Lösung, denke ich
bolerovt
Ich bin mir nicht 100% sicher, aber ich habe verstanden, dass genau das vermieden wird.
Jorgefpastor
2

Ich habe auch dieses Problem bekommen und es hat dazu geführt, dass meine Sitzungen nicht funktionieren. Aber auch nicht zu brechen ...

Ich habe eine Mungo-Verbindung verwendet.

Ich hatte das:

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

Sehr einfach. Aber die Anforderung blieb immer leer.

rm -rf node_modules
npm cache clean
npm install

Hat den Trick gemacht. Pass auf, dass du kein 'Mongodb' in deinem package.json hast! Nur Mungo und Connect-Mongo.

KLoozen
quelle
2

So habe ich das Problem unter Ubuntu behoben:

  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

Inspiriert von @mbochynski Antwort, aber ich musste zuerst einen symbolischen Link erstellen, sonst schlug die Neuerstellung fehl.

Collimarco
quelle
2

Ich hatte die gleichen Probleme, versuchte so viele Optionen, aber in der letzten npm intallin meinem mittleren App-Ordner funktionierte.

ashishkumar148
quelle
2

Ich hatte dieses Problem, weil ich den Ordner node_modules in mein Git-Repository aufgenommen habe. Als ich die node_modules auf dem anderen System neu erstellt habe, hat es funktioniert. Einer von ihnen lief unter Linux, der andere unter OS X. Vielleicht hatten sie auch andere Prozessorarchitekturen.

marcmtlca
quelle
1

Ich hatte das gleiche Problem auf meiner EC2-Instanz. Ich denke, die ursprüngliche Ursache war, dass bei der Installation von Mongo eine Node-Instanz ausgeführt wurde. Ich habe den Knotendienst gestoppt und bin dann gelaufen

sudo npm update 

innerhalb des Ordners der obersten Ebene meines Knotenprojekts. Dies hat das Problem behoben und alles war wie neu

Lloyd Banks
quelle
1

Ich habe versucht, einen Knoten auf einem freigegebenen Ordner einer virtuellen Maschine (Vagrant) auszuführen. Das war ein problem Mein Host-Computer ist Windows, ein unter Windows installierter Knoten, der wie ein Zauber funktioniert hat. Wenn Sie also eine virtuelle Maschine verwenden, versuchen Sie einfach, den Knotenserver auf der Hostmaschine auszuführen.

Lukas Liesis
quelle
1

Ich hatte nur das gleiche Problem und buchstäblich funktionierte nichts für mich. Der angezeigte Fehler kerberosverursacht das Problem und war eine der mongooseAbhängigkeiten. Da ich unter Ubuntu bin, dachte ich, dass es irgendwo zwischen den global installierten Paketen - in /usr/lib/node_modulesvia sudo- und denen, die sich im Benutzerbereich befinden, Berechtigungsprobleme geben könnte .

Ich habe mongooseglobal installiert - sudonatürlich, und alles begann wie erwartet zu funktionieren.

PS Das kerberosPaket wird jetzt auch global neben installiert mongoose, aber ich kann mich nicht erinnern, ob ich es absichtlich getan habe - während ich versucht habe, das Problem zu lösen, oder ob es von Anfang an da war.

Mahdi
quelle
1

Ich arbeite an Docker mit centOS 7 und habe das gleiche Problem festgestellt.

Nachdem ich mich umgesehen und mehrere Versuche unternommen hatte, konnte ich dieses Problem beheben, indem ich mongodb und mongodb-server installierte

yum install mongodb mongodb-server

Ich denke nicht, dass dies der beste Weg ist, um den Minimalbehälter herzustellen. aber ich kann den Umfang auf die folgenden Pakete beschränken

==============================================================================================================
 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
bolerovt
quelle
1

Ich konnte das Problem beheben, indem ich monk package deinstallierte und neu installierte. Die Erstinstallation hatte anscheinend eine beschädigte Mongodb / Bson-Abhängigkeit.

Johnkop
quelle
1

Followint @ user1548357 Ich habe beschlossen, die Moduldatei selbst zu ändern. Um die Probleme zu vermeiden, auf die in den folgenden gültigen Kommentaren hingewiesen wird, habe ich meine Änderungen in ein Nachinstallationsskript aufgenommen, damit ich es festlegen und vergessen kann und sicher sein kann, dass es ausgeführt wird, wenn meine Module installiert werden.

// package.json
"scripts": {
    // other scripts
    "postinstall": "node ./bson.fix.js"
},

und das Skript ist:

// 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');
  });
});
Mike M.
quelle
1

Beenden Sie das Problem einfach, indem Sie einfach diese Zeile hinzufügen und den Blockpfad abfangen: 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'); 

Das ist alles!!!

mallikarjuna gv
quelle
Hallo, danke für deine Antwort. Verwenden Sie die Formatierung von Codebeispielen, um das Lesen zu erleichtern.
F_SO_K
1

Das einzige, was mir unter Windows 7 (x64) hilft: https://stackoverflow.com/a/29714359/2670121

Installieren Sie Node und Python mit x32-Versionen neu.
Ich habe viel Zeit mit diesem Fehler verbracht:

Fehler beim Laden der c ++ bson-Erweiterung

und schließlich, als ich das Modul node-gyp(zum Erstellen nativer Addons) und sogar das Windows SDK mit Visual Studio installierte, erkannte nodejs das zusammengebaute Modul nichtbson.node als Modul. Nach der Neuinstallation ist das Problem behoben.

Was bedeutet dieser Fehler?

Eigentlich ist es sogar kein Fehler. Sie können immer noch Mungo verwenden. Aber in diesem Fall haben Sie anstelle der schnellen nativen Realisierung des bsonModuls erhaltenjs-realization , die langsamer ist.

Ich habe viele Tipps gesehen wie: "Pfad tief in node_modules bearbeiten ..." - was völlig nutzlos ist, da es das Problem nicht löst, sondern nur die Fehlermeldungen ausschaltet.

Alendorff
quelle