web-dev-qa-db-fra.com

Impossible de charger l'extension c ++ bson

Un nœud total noob ici. J'ai essayé de configurer un exemple d'application de noeud, mais l'erreur suivante continue de s'afficher chaque fois que j'essaie de l'exécuter:

application de noeud

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)
184
Theja

Je suppose que vous ne disposiez pas des outils de création lors de l’installation de 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 la mise à jour npm basée sur le commentaire @tobias (après l'installation de build-essential)

npm update
200
Pradeep Mahdevu

Je viens de résoudre ça.

Lorsque vous installez le module Mongoose par npm, il ne contient pas de module bson intégré. Dans le fichier node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js, changez la ligne

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

à

bson = require('bson');

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

100
user1548357

J'ai réglé le problème d'obtention de "Échec de chargement de l'extension c ++ bson" sur raspbian (debian pour framboise) par:

npm install -g node-gyp

puis

npm update
36
Daniele Urania

J'ai été incapable de résoudre ce problème

jusqu'à maintenant. Tout d'abord, vous devez avoir les paquets 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 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 les 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à

node-gyp rebuild

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

26
mbochynski

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

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

Sur WIN 8.1

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

J'ai enlevé la ligne "mangouste": "^ 3.8.15" de package.json

CLI: npm install mongoose --save

Maintenant, on dit "mangouste": "^ 4.0.6" dans package.json et l'erreur que j'ai eu est partie.

18
Oak

J'utilise Ubuntu 14.04 et pour résoudre ce problème, je devais créer un lien symbolique pour que le nœud 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
10
Anthony

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 les pilotes mongodb que je spécifiais dans le fichier package.json étaient incompatibles avec ma version de MongoDB. Je l'ai changée pour ma dernière version qui était (1.4.34) et ça a fonctionné !!!

8
the pickle

Sudo npm rebuild était ce qui le réglait pour moi.

7
Zach Dahl

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

 "dependencies": {
    "consolidate": "~0.9.1",
    "express": "3.x",
    "mongodb": "~2.0.36",
    "mongoose": "^4.1.12"
  }
7
Feezy23

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 bson module. Je compris que je ne l'avais pas en premier lieu, alors je cours

npm installer bson 

puis

npm update

Tous ont été triés. Essayé et testé sous Ubuntu.

7
Steven

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

Mongoose bson installer via npm émet 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 !!

4
Rama Prashanth

Pour moi, il suffit de lancer ces commandes dans mon répertoire api:

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

Je viens de courir:

Sudo npm install bson

et

Sudo npm update

et tout va bien.

3
Vladimir Kovpak

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

Choses à vérifier:

  • instance de MongoDB: Avez-vous une instance de MongoDB en cours d'exécution?
  • Config: Avez-vous correctement configuré Mongoose sur votre instance MongoDB? Je soupçonne que votre configuration est incorrecte, car le message d'erreur crache une chaîne très étrange pour le nom d'hôte de votre serveur mongodb ..
3
hendrikswan

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

  • Sudo yum groupinstall "Outils de développement"
  • Sudo npm installer -g node-gyp
  • rm -r node_modules
  • npm cache clean
  • npm installer
2
liudong

Je l'ai corrigé en changeant la ligne 10 de /node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js à partir de:

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

à:

bson = require('bson');
2
jorgefpastor

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 de mangouste.

J'ai eu 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 demande 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.

2
KLoozen

J'ai eu ce problème parce que j'inclusais le dossier node_modules dans mon référentiel Git. Quand j'ai reconstruit le node_modules sur l'autre système cela a fonctionné. L'un d'eux fonctionnait sous Linux, l'autre sous OS X. Ils avaient peut-être également différentes architectures de processeur.

1
marcmtlca

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é par la réponse de @mbochynski, mais je devais d'abord créer un lien symbolique, sinon la reconstruction échouait.

1
collimarco

j'avais le même problème, j'ai essayé beaucoup d'options, mais dans le dernier npm intall dans mon dossier de l'application moyenne, cela a fonctionné.

1
ashishkumar148

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 Node en cours d'exécution lorsque j'ai installé Mongo. J'ai arrêté le service Node puis exécuté

Sudo npm update 

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

1
Lloyd Banks

sur Ubuntu 14.04, je devais créer un lien dans/usr/bin car/usr/bin/env recherchait/usr/bin/node

ln -s/usr/bin/nodejs/usr/bin/node

Les messages d'erreur peuvent être trouvés dans le fichier builderror.log de chaque répertoire, donc pour le message:

[email protected] installer/usr/local/lib/node_modules/mongodb/node_modules/mongodb-core/node_modules/bson (node-gyp reconstruction 2> builderror.log) || (sortie 0)

regardez ce fichier pour plus d'informations sur le problème exact

/usr/local/lib/node_modules/mongodb/node_modules/mongodb-core/node_modules/bson/builderror.log

0
Bob

Dans notre cas, la version b ++ de c ++ n'a pas été trouvée, c'est parce que nous étions derrière un proxy d'entreprise et que quelque chose dans le processus de construction de BSON doit rechercher des fichiers. Lorsque nous avons examiné node_modules/bson/builderror.log, nous avons constaté une erreur comme celle-ci:

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)

Ce qui suggère que le proxy pourrait être la question. La définition des variables d’environnement http_proxy et https_proxy a résolu le problème.

0
Matt M.

Si l'extension bson n'était pas la raison, j'ai deviné que l'autre raison pour "échec de la connexion" serait l'identifiant de l'utilisateur. J'ai donc créé une nouvelle base de données et ajouté un utilisateur pour la base de données, avec un mot de passe pour cet utilisateur (note: pas le mot de passe du compte mongolab). J'ai mis à jour ceux sur mon code et le tour est joué! Ça a marché. Duh non? :RÉ

0
Theja

Followint @ user1548357 J'ai décidé de modifier le fichier de 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 de pouvoir le définir, l’oublier et d’être assuré qu’il sera exécuté lors de l’installation de mes modules.

// 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');
  });
});
0
Mike M

J'ai été capable de résoudre en désinstallant et en réinstallant le paquet monk. L'installation initiale avait apparemment une dépendance mongodb/bson corrompue.

0
johnkop

J'ai également rencontré le même problème et je suis un utilisateur Mac OSX. En gros, vous devez vous assurer que vous avez installé le Xcode ainsi que les "Outils de ligne de commande" dans le Xcode.

Xcode est gratuit et peut être téléchargé ici: https://developer.Apple.com/xcode/downloads/

Après avoir installé le Xcode, ouvrez-le et cliquez sur "Préférences" dans le menu déroulant, puis cliquez sur l'icône "Téléchargements". Assurez-vous que les "Outils de ligne de commande" sont installés.

Ensuite, exécutez les commandes suivantes, comme tous les autres utilisateurs mentionnés ci-dessus:

rm -rf node_modules
npm cache clean
npm install
0
Sunny Ip

Dans mon cas, je npm install tous les modules de ma machine locale (Mac) et je n’ai pas inclus node_modules dans .gitignore et chargé sur github. Ensuite, j'ai cloné le projet sur mon ordinateur, comme vous le savez, il tourne sous Linux, alors j'ai les erreurs. Ce que j'ai fait est simplement d'inclure node_modules dans .gitignore et d'utiliser npm install dans mon exemple aws, alors cela fonctionne.

0
Jie

Pour Windows 7.1, ces instructions m'ont aidé à corriger mon environnement de construction:

https://github.com/mongodb/js-bson/issues/58#issuecomment-68217275

http://christiankvalheim.com/post/diagnose_installation_problems/

0
dbasch

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

Réinstallez le noeud et python avec les versions x32.
J'ai passé beaucoup de temps avec cette erreur (échec de chargement de l'extension c ++ bson) et enfin, lorsque j'ai installé le module node-gyp (pour les addons de génération natifs) et même installé le SDK Windows avec Visual Studio - nodejs didn ' t reconnaître le module assemblé bson.node en tant que 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 de la réalisation native rapide du module bson, vous obtenez js-realization, ce qui est plus lent. J'ai vu de nombreux conseils tels que: "modifier le chemin profondément dans node_modules ...", ce qui est totalement inutile car il ne résout pas le problème, il suffit de désactiver les messages d'erreur.

0
Alendorff

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

après avoir regardé autour de moi et essayé plusieurs fois, 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 conteneur 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
0
bolerovt

facilement résoudre le problème en ajoutant simplement cette ligne à la fois essayer et attraper block path: 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!!!

0
mallikarjuna gv

J'essayais d'exécuter le noeud sur le dossier partagé de la machine virtuelle (vagant). C'était un problème. Mon ordinateur hôte est Windows, le 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 noeud sur la machine hôte.

0
Lukas

J'ai juste eu le même problème et littéralement rien ne fonctionnait pour moi. L'erreur indiquant que kerberos était la cause du problème et qu'il s'agissait de l'une des dépendances mongoose. Étant donné que je suis sur Ubuntu, je pensais qu'il pourrait y avoir des problèmes de permission entre les packages installés globalement, dans /usr/lib/node_modules via Sudo, et ceux qui se trouvent sur l'espace utilisateur.

J'ai installé mongoose globalement - avec Sudo bien sûr, et tout a commencé à fonctionner comme prévu.

P.S. Le paquetage kerberos est maintenant également installé globalement à côté de mongoose, mais je ne me souviens pas si je l'ai fait délibérément - alors que j'essayais de résoudre le problème ou qu'il existait depuis le début .

0
Mahdi