Échec du chargement de l'extension bson c ++

185

Un noob total noob ici. J'ai essayé de configurer un exemple d'application de nœud, mais l'erreur suivante continue à apparaître à chaque fois que j'essaye de courir:

application de nœud

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
la source
3
L'erreur est failed to connect to, donc je pense que ce bsonmessage peut être sans rapport et sans importance. Êtes-vous sûr que vos paramètres de connexion Mongo sont corrects?
loganfsmyth
1
Histoire drôle Je n'obtiens cette erreur que sur une machine Windows ... Je n'ai pas essayé d'installer node-gyp mais j'ai essayé presque tout le reste et j'ai toujours l'erreur. et chocoletey n'installe pas l'essentiel de la construction
Snymax
Le code JS BSON n'est-il pas presque aussi rapide que le C ++ maintenant? Si oui, est-ce vraiment un problème?
UpTheCreek
Pour les personnes sur les iojs plus récents qui rencontrent ce problème, j'ai ouvert un ticket pour suivre ce problème: github.com/mongodb/js-bson/issues/136
bitinn
Remarque: j'utilise Keystone.js comme framework mvc. Pour moi, vous remplacez "../build/Release/bson" par "../browser_build/bson". Si vous montez, vous voyez le dossier browser_build.
Pantalon Pranay du

Réponses:

201

Je suppose que vous n'aviez pas les outils de mise à disposition lorsque vous avez installé votre bibliothèque mongodb. Je vous suggère de faire

xcode-select --install(sur un mac) ou sudo apt-get install gcc make build-essential(sur ubuntu)

et courir

rm -rf node_modules
npm cache clean
npm install

OU juste une mise à jour de npm basée sur le commentaire @tobias (après l'installation de build-essential)

npm update
Pradeep Mahdevu
la source
2
+1. Tout ce que j'avais à faire était les 3 dernières lignes - je pense que la raison pour laquelle la mienne n'a pas été construite était parce qu'elle faisait partie du mongoskinmodule.
Matt Browne
2
Hou la la! Cette sudo apt-get install gcc make build-essentialastuce est l'un des meilleurs conseils de développement Node.js + Ubuntu que j'ai jamais vus. C'est un changement absolu si vous êtes habitué au développement d'applications Web et au développement avec Node.js sur Ubuntu.
Charney Kaye
3
Quelle est la raison de l'installation gccet makeavec build-essential? Ce dernier dépend des deux autres, ils seront donc installés de toute façon ( packages.ubuntu.com/trusty/build-essential ). Faire sudo apt-get install build-essentialdevrait suffire.
Sergey
8
Que diriez-vous sur Windows ?? J'obtiens quelque chose comme ceci sur mon invite de commande Windows C: \ Users \ me> node C: \ Users \ me \ Desktop \ nodeproject \ datagen.js {[Erreur: Impossible de trouver le module '../build/Release/bson' ] code: 'MODULE_NOT_FOUND'} js-bson: Échec du chargement de l'extension bson c ++, en utilisant la version JS pure {[Erreur: Impossible de trouver le module '../build/Release/bson'] code: 'MODULE_NOT_FOUND'} js-bson: Échec du chargement de l'extension bson c ++, en utilisant la version pure JS Connecté correctement au serveur
ULLAS K
1
Qu'en est-il des machines à fenêtres :(
Jamie Hutber
100

Je viens de résoudre cela.

Lorsque vous installez le module mangouste par npm, il n'a pas de module bson intégré dans son dossier. Dans le fichier node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js, modifiez la ligne

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

à

bson = require('bson');

puis installez le module bson à l'aide de npm.

user1548357
la source
36
est-ce une bonne idée de changer les choses dans le répertoire node_modules? Cela semble fragile
Douglas Ferguson
6
@DouglasFerguson Pas vraiment. Si vous modifiez un node_module, je vous suggère de bifurquer le dépôt et d'installer votre module modifié via npm / bower.
Christopher Marshall
4
Cette réponse a fonctionné. Devs chez Mongoose, veuillez corriger cela!
Steve K
23
C'est un hack, pas une solution.
Ashesh
10
Ce n'est pas une solution. Avec le même résultat, vous pouvez simplement supprimer les chaînes qui impriment l'erreur. Cette erreur apparaît à cause du plugin natif c ++ pour bson introuvable et dans ce cas la réalisation js sera utilisée de toute façon.
Alendorff
36

J'ai trié le problème de l'obtention du "Impossible de charger l'extension bson c ++" sur raspbian (debian pour framboise) par:

npm install -g node-gyp

puis

npm update
Daniele Urania
la source
3
J'ai résolu mon problème simplement en exécutant npm update, sans même installer rien d'autre.
MalcolmOcean
27

Je n'ai pas pu résoudre ça

jusqu'à maintenant. Tout d'abord, vous devez avoir des packages système mentionnés par Pradeep Mahdevu. Ce sont:

xcode-select --install (on a mac) 

ou

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

Ensuite, j'ai installé node-gyp

npm install -g node-gyp 

comme l'a dit datadracer, mais la mise à jour de npm également suggérée par lui est risquée. Il met à jour tous les modules, ce qui peut être dangereux (parfois des changements d'API entre les versions).

Je suggère d'aller dans le répertoire node_modules / mongodb / node_modules / bson et à partir de là, utilisez

node-gyp rebuild

Cela a résolu le problème pour moi.

mbochynski
la source
5
Qu'en est-il de Windows :(
Jamie Hutber
@JamieHutber Install VS 2013
Rahil Wazir
Je faisais cela sur une version de DietPi sur un 512 Mo RP1. Je voulais juste mentionner que je devais installer Python ( apt-get install python), puis à partir de node_modules/mongoose/node_modules/mongodb/node_modules/bson/run make. Cela a créé Release/bson.node.
staticboy
20

Un problème courant est que node-gyp nécessite Python 2.x et si votre système pythonpointe vers 3.x, la compilation échouera bson, sans avertissement. Vous pouvez résoudre ce problème en définissant une pythonclé globale dans votre configuration npm qui pointe vers l'exécutable 2.x sur votre système. Par exemple, sur Arch Linux:

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

Sur WIN 8.1

Il semble que j'ai utilisé une mauvaise version de mangouste dans mon package.jsonfichier.

J'ai supprimé la ligne "mongoose" : "^3.8.15"de package.json.

CLI:

npm install mongoose --save

Maintenant , il est dit "mongoose": "^4.0.6"dans package.jsonet l'erreur que j'avais est parti.

Chêne
la source
Je vous remercie! Vous m'avez sauvé d'innombrables heures de coups de tête sur le clavier. C'était la dernière et la seule solution qui fonctionnait sur Windows. Le problème était que j'utilisais une version 3.x de mongoose qui semblait incompatible avec la dernière installation de mongodb sur mon PC.
ChallengeAccepté le
Cela m'a finalement permis de fonctionner également sur Ubuntu.
Jason Kennaly
Oui, fonctionnant également sur Mac. Merci!
jos
Merci beaucoup! Suite à la session de formation Microsoft "Vous avez des documents! A MongoDB Jump Start" et a eu la même erreur, uniquement liée au package mongodb - a fait les étapes ci-dessus pour celui-là et bien sûr, il est maintenant en cours d'exécution! :)
Fernando Madruga
11

J'utilise Ubuntu 14.04 et pour le réparer pour moi, j'ai dû créer un lien symbolique pour que node pointe vers nodejs comme décrit ici:

nodejs vs node sur ubuntu 12.04

Une fois que j'ai fait cela, j'ai relancé ces commandes:

rm -rf node_modules
npm cache clean
npm install
Anthony
la source
Grand Anthony! J'utilise également Ubuntu 14.04 et votre suggestion a résolu le problème pour moi. Il ne suffit pas d'installer build-essential et de tout réinstaller: j'ai également dû ajouter le 'node' ln.
Franco
8

Donc dans mon cas, j'ai d'abord essayé de vérifier sous ce répertoire / node_modules / mongoose / node_modules / , juste pour confirmer que j'ai le module bson . J'ai compris que je ne l'avais pas en premier lieu, puis je viens de courir

npm installer bson 

puis

mise à jour npm

Tout a été trié, essayé et testé sous Ubuntu.

Steven
la source
travaillé pour moi aussi, mais j'ai aussi tapé makedans/devel/node_modules/bson/
ExeBook
1
A travaillé pour moi. Le nettoyage du cache npm ne l'a pas fait. En fait, tout ce que j'ai fait était de / node_modules / mongoose npm install bson
run
8

je voulais juste dire que j'avais aussi l'erreur

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

Mais avec aucune des autres erreurs. J'ai tout essayé et il s'est avéré que les pilotes mongodb que je spécifiais dans le fichier package.json étaient incompatibles avec ma version de MongoDB. Je l'ai changé pour ma dernière version qui était (1.4.34) et cela a fonctionné !!!

le cornichon
la source
en effet npm install mongodb @ dernier a résolu pour moi le problème
tam.teixeira
8

sudo npm rebuild était ce qui l'a arrangé pour moi.

Zach Dahl
la source
8

J'ai finalement corrigé cette erreur en mettant à jour ma version de dépendance mongodb à ~ 2.0.36 dans package.json.

 "dependencies": {
    "consolidate": "~0.9.1",
    "express": "3.x",
    "mongodb": "~2.0.36",
    "mongoose": "^4.1.12"
  }
Feezy23
la source
Le mien était légèrement lié, j'utilisais mongod, et non mobgo db .
Brad B
5

Malheureusement, toutes les réponses ci-dessus sont à moitié exactes. Il a fallu beaucoup de temps pour comprendre cela.

Mongoose bson install via npm jette un avertissement et provoque l'erreur ...

npm install -g node-gyp

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

Cela fonctionne comme par magie !!

Rama Prashanth
la source
Cela échoue avec une erreur:$ 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

Pour moi, il suffit d'exécuter ces commandes dans mon répertoire api:

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

Je viens de courir:

sudo npm install bson

et

sudo npm update

et tout devient ok.

V. Kovpak
la source
Vous devriez éviter d'exécuter npm avec les droits sudo.
loganhuskins
Tout ce que vous pouvez éviter d'avoir dans l'espace sudo, vous devriez. Je ne pense pas que cela causera de graves problèmes, c'est juste une bonne pratique. Voici un article qui peut aider (je ne peux pas en garantir autrement que d'aimer John Papa). johnpapa.net/how-to-use-npm-global-without-sudo-on-osx
loganhuskins
3

Le message d'extension bson n'est qu'un avertissement , je le reçois tout le temps dans mon application nodejs.

Choses à vérifier:

  • Instance MongoDB : une instance MongoDB est-elle en cours d'exécution?
  • Config : avez-vous correctement configuré Mongoose sur votre instance MongoDB? Je soupçonne que votre configuration est fausse, car le message d'erreur crache une chaîne très étrange pour le nom d'hôte de votre serveur mongodb.
Hendrikswan
la source
C'était une information utile. Avec cela à l'écart, j'ai compris que je mélangeais les informations du compte utilisateur mongolab avec les informations utilisateur réelles de mongodb pour la base de données.
Theja
Hmm, je rencontre le même problème. Tout fonctionnait sur mon serveur de test local et j'utilise mongoHQ, donc je n'ai pas besoin d'une instance mongo locale, qu'est-ce qui pourrait ne pas se passer?
Karoh
oubliez cela, la réponse de Pradeep ci-dessous a résolu cela :)
Karoh
3

J'ai résolu ce problème sur CentOS en

  • sudo yum groupinstall "Outils de développement"
  • sudo npm installer -g node-gyp
  • rm -r modules_noeud
  • npm cache propre
  • npm installer
Liudong
la source
@Theja a déclaré que l'erreur ne se produisait que sur la machine Windows.
Pawel Veselov
3

Je l'ai corrigé en changeant la ligne 10 de:

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

de:

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

à:

bson = require('bson');
jorgefpastor
la source
3
Cela rend le package pour utiliser la solution pure js, je suppose
bolerovt
Je ne suis pas sûr à 100%, mais j'ai compris que cela évite exactement cela.
jorgefpastor
2

J'ai également eu ce problème et cela a empêché mes sessions de fonctionner. Mais pas pour casser non plus ...

J'ai utilisé une connexion mangouste.

J'avais ceci:

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

Très simple. Mais la req.session restait toujours vide.

rm -rf node_modules
npm cache clean
npm install

A fait le tour. Attention, vous n'avez pas de «mongodb» dans votre package.json! Juste Mongoose et connect-mongo.

KLoozen
la source
2

Voici comment j'ai résolu le problème sur Ubuntu:

  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

Inspiré de la réponse @mbochynski, mais j'ai d'abord dû créer un lien symbolique, sinon la reconstruction a échoué.

collimarco
la source
2

npm intallJ'avais le même problème essayé tant d'options, mais dans le dernier dans mon dossier d'application moyen a fonctionné.

ashishkumar148
la source
2

J'ai eu ce problème car j'incluais le dossier node_modules dans mon référentiel Git. Lorsque j'ai reconstruit les node_modules sur l'autre système, cela a fonctionné. L'un d'eux exécutait Linux, l'autre OS X. Peut-être qu'ils avaient également des architectures de processeur différentes.

marcmtlca
la source
1

J'ai eu le même problème sur mon instance EC2. Je pense que la cause initiale était parce que j'avais une instance de Node en cours d'exécution lorsque j'ai installé Mongo. J'ai arrêté le service Node puis j'ai exécuté

sudo npm update 

à l'intérieur du dossier de niveau supérieur de mon projet de nœud. Cela a résolu le problème et tout était comme neuf

Lloyd Banks
la source
1

J'essayais d'exécuter le nœud sur le dossier partagé de la machine virtuelle (vagrant). C'était un problème. Ma machine hôte est Windows, un nœud installé sur Windows et a fonctionné comme un charme. Donc, si vous utilisez une machine virtuelle, essayez simplement d'exécuter le serveur de nœuds sur la machine hôte.

Lukas Liesis
la source
1

J'ai juste eu le même problème et littéralement rien n'a fonctionné pour moi. L'erreur était kerberosà l'origine du problème et c'était l'une des mongoosedépendances. Depuis que je suis sur Ubuntu, j'ai pensé qu'il pourrait y avoir des problèmes d'autorisation quelque part entre les packages installés globalement - /usr/lib/node_modulesviasudo , et ceux qui se trouvent sur l'espace utilisateur.

J'ai installé dans le mongoosemonde entier - avec sudobien sûr, et tout a commencé à fonctionner comme prévu.

PS Le kerberospaquet est maintenant également installé globalement à côté de mongoose, mais je ne me souviens pas si je l'ai fait délibérément - pendant que j'essayais de résoudre le problème, ou s'il était là depuis le début.

Mahdi
la source
1

Je travaille sur Docker avec centOS 7 et j'ai rencontré le même problème.

après avoir regardé autour de vous et fait plusieurs essais, j'ai résolu ce problème en installant mongodb et mongodb-server

yum install mongodb mongodb-server

Je ne pense pas que ce soit la meilleure façon de produire le contenant minimal. mais je peux limiter la portée dans les packages suivants

==============================================================================================================
 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
la source
1

J'ai pu résoudre le problème en désinstallant et en réinstallant le paquet monk. L'installation initiale avait apparemment une dépendance mongodb / bson corrompue.

johnkop
la source
1

Followint @ user1548357 J'ai décidé de changer le fichier du module lui-même. Afin d'éviter les problèmes signalés par les commentaires valides ci-dessous, j'ai inclus mes modifications dans un script de post-installation afin que je puisse le définir et l'oublier et être assuré qu'il fonctionnera lorsque mes modules seront installés.

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

et le script est:

// 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
la source
1

éliminez facilement le problème en ajoutant simplement cette ligne à la fois essayez et attrapez le chemin du bloc: 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'); 

C'est tout!!!

mallikarjuna gv
la source
Salut, merci pour votre réponse. Veuillez utiliser la mise en forme des exemples de code pour les rendre plus faciles à lire.
F_SO_K
1

La seule chose qui m'aide sur Windows 7 (x64): https://stackoverflow.com/a/29714359/2670121

Réinstallez le nœud et python avec les versions x32.
J'ai passé beaucoup de temps avec cette erreur:

Échec du chargement de l'extension bson c ++

et enfin, lorsque j'ai installé le module node-gyp(pour créer des addons natifs) et même installé le SDK Windows avec Visual Studio - nodejs n'a pas reconnu le module assemblé bson.nodecomme un module. Après la réinstallation, le problème a disparu.

Encore une fois, que signifie cette erreur?

En fait, ce n'est même pas une erreur. Vous pouvez toujours utiliser la mangouste. Mais dans ce cas, au lieu d'une réalisation native rapide du bsonmodule, vous obtenez js-realization, ce qui est plus lent.

J'ai vu de nombreux conseils comme: "modifier le chemin au fond de node_modules ..." - ce qui est totalement inutile, car cela ne résout pas le problème, mais vient de désactiver les messages d'erreur.

Alendorff
la source