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)
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
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.
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
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.
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"
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.
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
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é !!!
Sudo npm rebuild
était ce qui le réglait pour moi.
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"
}
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.
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 !!
Pour moi, il suffit de lancer ces commandes dans mon répertoire api:
rm -rf node_modules
npm cache clean
npm install
Je viens de courir:
Sudo npm install bson
et
Sudo npm update
et tout va bien.
Le message d'extension bson est juste un warning, je le reçois tout le temps dans mon application nodejs.
Choses à vérifier:
J'ai résolu ce problème sur CentOS par
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');
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.
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.
Voici comment j'ai résolu le problème sur Ubuntu:
ln -s /usr/bin/nodejs /usr/bin/node
npm install node-gyp
cd node_modules/mongodb/node_modules/bson
node-gyp rebuild
Inspiré par la réponse de @mbochynski, mais je devais d'abord créer un lien symbolique, sinon la reconstruction échouait.
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é.
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
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
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.
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É
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');
});
});
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.
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
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.
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/
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.
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
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!!!
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.
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 .