Error al cargar la extensión c ++ bson

185

Un nodo novato total aquí. He estado tratando de configurar una aplicación de nodo de muestra, pero el siguiente error sigue apareciendo cada vez que intento ejecutar:

aplicación de nodo

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
fuente
3
El error es failed to connect to, así que creo que ese bsonmensaje puede no estar relacionado y no importar. ¿Estás seguro de que la configuración de conexión de Mongo es correcta?
loganfsmyth
1
Una historia divertida: solo recibo este error en una máquina con Windows ... no he intentado instalar node-gyp, pero he intentado casi todo lo demás y sigo recibiendo el error. y chocoletey no instalarán elementos esenciales de construcción
Snymax
¿No es el código JS BSON casi tan rápido como el C ++ ahora? Si es así, ¿es realmente un problema?
UpTheCreek
Para las personas en ioj más recientes que experimentan este problema, he abierto un ticket para rastrear este problema: github.com/mongodb/js-bson/issues/136
bitinn
Nota: Estoy usando Keystone.js como mi framework mvc. Para mí, cambia "../build/Release/bson" a "../browser_build/bson". Si sube, verá la carpeta browser_build.
Pranay Pant

Respuestas:

201

Supongo que no tenía las herramientas de creación disponibles cuando instaló su biblioteca mongodb. Te sugiero que hagas

xcode-select --install(en una mac) o sudo apt-get install gcc make build-essential(en ubuntu)

y correr

rm -rf node_modules
npm cache clean
npm install

O simplemente actualización npm basada en el comentario de @tobias (después de instalar build-essential)

npm update
Pradeep Mahdevu
fuente
2
+1. Todo lo que tuve que hacer fueron las últimas 3 líneas: creo que la razón por la que la mía no se construyó fue porque vino como parte del mongoskinmódulo.
Matt Browne
2
¡Guauu! Ese sudo apt-get install gcc make build-essentialconsejo es uno de los mejores consejos de desarrollo de Node.js + Ubuntu que he visto. Es un cambio de juego absoluto si estás acostumbrado a desarrollar aplicaciones web y solo desarrollas con Node.js en Ubuntu.
Charney Kaye
3
¿Cuál es la razón de la instalación gccy makejunto con build-essential? Este último depende de los otros dos, por lo que se instalarán de todos modos ( packages.ubuntu.com/trusty/build-essential ). Hacer sudo apt-get install build-essentialdebería ser suficiente.
Sergey
8
¿Qué tal en Windows? Recibo algo como esto en mi símbolo del sistema de Windows C: \ Users \ me> node C: \ Users \ me \ Desktop \ nodeproject \ datagen.js {[Error: No se puede encontrar el módulo '../build/Release/bson' ] código: 'MODULE_NOT_FOUND'} js-bson: no se pudo cargar la extensión c ++ bson, utilizando la versión JS pura {[Error: No se puede encontrar el módulo '../build/Release/bson'] código: 'MODULE_NOT_FOUND'} js-bson: Error al cargar la extensión c ++ bson, utilizando la versión JS pura Conectado correctamente al servidor
ULLAS K
1
¿Qué pasa con las máquinas de ventana :(
Jamie Hutber
100

Acabo de resolver eso.

Cuando instala el módulo mangosta por npm, no tiene un módulo bson integrado en su carpeta. En el archivo node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js, cambie la línea

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

a

bson = require('bson');

y luego instale el módulo bson usando npm.

usuario1548357
fuente
36
¿Es una buena idea cambiar las cosas dentro del directorio node_modules? Eso parece frágil
Douglas Ferguson
66
@ Douglas Douglas no realmente. Si edita un node_module, le sugiero que bifurque el repositorio e instale su módulo modificado a través de npm / bower.
Christopher Marshall
44
Esta respuesta funcionó. Desarrolladores en Mongoose, ¡arreglen esto!
Steve K
23
Este es un truco, no una solución.
Ashesh
10
Esta no es una solución. Con el mismo resultado, puede eliminar cadenas que imprimen errores. Este error aparece debido a que no se encuentra el complemento nativo de c ++ para bson y, en este caso, la realización de js se utilizará de todos modos.
Alendorff
36

He ordenado el problema de obtener "No se pudo cargar la extensión b ++ de c ++" en raspbian (debian para raspberry) por:

npm install -g node-gyp

y entonces

npm update
Daniele Urania
fuente
3
Resolví mi problema simplemente ejecutando npm update, sin siquiera instalar nada más.
MalcolmOcean
27

No pude resolver esto

hasta ahora. En primer lugar, debe tener los paquetes del sistema mencionados por Pradeep Mahdevu. Esos son:

xcode-select --install (on a mac) 

o

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

Luego instalé node-gyp

npm install -g node-gyp 

como dijo datadracer, pero la actualización de npm también sugerida por él es arriesgada. Actualiza todos los módulos, lo que puede ser peligroso (a veces, cambios de API entre versiones).

Sugiero ir al directorio node_modules / mongodb / node_modules / bson y desde allí usar

node-gyp rebuild

Eso resolvió el problema para mí.

mbochynski
fuente
55
¿Qué pasa con windows :(
Jamie Hutber
@JamieHutber Install VS 2013
Rahil Wazir
Estaba haciendo esto en un lanzamiento de DietPi en un RP1 de 512 MB. Solo quería mencionar que tenía que instalar Python ( apt-get install python) y luego node_modules/mongoose/node_modules/mongodb/node_modules/bson/ejecutarlo make. Esta creado Release/bson.node.
staticboy
20

Un problema común es que node-gyp requiere Python 2.xy si su sistema pythonapunta a 3.x, no se compilará bson, sin previo aviso. Puede solucionar esto configurando una pythonclave global en su configuración de npm que apunte al ejecutable 2.x en su sistema. Por ejemplo, en Arch Linux:

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

En WIN 8.1

Parece que usé una versión incorrecta de mangosta en mi package.jsonarchivo.

Quité la línea "mongoose" : "^3.8.15"de package.json.

CLI:

npm install mongoose --save

Ahora se dice "mongoose": "^4.0.6"en package.jsony el error que tuve se va.

Roble
fuente
¡Gracias! Me salvaste de innumerables horas de golpes en la cabeza con el teclado. Esta fue la última y única solución que funcionó en Windows. El problema era que estaba ejecutando una versión 3.x de mangosta que parecía ser incompatible con la última instalación de mongodb en mi PC.
Desafío
Esto finalmente me hizo correr en Ubuntu también.
Jason Kennaly
Sí, también se ejecuta en Mac. ¡Gracias!
jos
¡Gracias un montón! Luego de la sesión de entrenamiento "You Have Got Documents! A MongoDB Jump Start" de Microsoft y tuve el mismo error, solo relacionado con el paquete mongodb: ¡hice los pasos anteriores para ese y, efectivamente, ahora se está ejecutando! :)
Fernando Madruga
11

Estoy ejecutando Ubuntu 14.04 y para solucionarlo tuve que crear un enlace simbólico para que el nodo apunte a nodejs como se describe aquí:

nodejs vs node en ubuntu 12.04

Una vez que hice eso volví a ejecutar estos comandos:

rm -rf node_modules
npm cache clean
npm install
Antonio
fuente
Gran Anthony! También estoy ejecutando Ubuntu 14.04 y su sugerencia me resolvió el problema. No es suficiente instalar build-essential y reinstalar todo: también tuve que agregar el 'nodo' ln.
Franco
8

Entonces, en mi caso, primero intenté verificar bajo este directorio / node_modules / mongoose / node_modules / , solo para confirmar que tengo el módulo bson . Me di cuenta de que no lo tenía en primer lugar, luego simplemente corrí

npm instalar bson 

y entonces

actualización npm

Todos fueron ordenados, probados y probados en Ubuntu.

Steven
fuente
trabajó para mí también, pero también he escrito makeen/devel/node_modules/bson/
ExeBook
1
Trabajó para mi. La limpieza del caché npm no lo hizo. En realidad, todo lo que hice fue desde / node_modules / mongoose npm install bson
run
8

solo quería decir que también tuve el error

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

Pero sin ninguno de los otros errores. Intenté todo y resultó que los controladores mongodb que estaba especificando en el archivo package.json eran incompatibles con mi versión de MongoDB. ¡Lo cambié a mi última versión que era (1.4.34) y funcionó!

el pepinillo
fuente
de hecho NPM instalar mongodb @ última resuelto el problema para mí
tam.teixeira
8

sudo npm rebuild fue lo que me arregló.

Zach Dahl
fuente
8

Finalmente corregí este error actualizando mi versión de dependencia mongodb a ~ 2.0.36 en package.json.

 "dependencies": {
    "consolidate": "~0.9.1",
    "express": "3.x",
    "mongodb": "~2.0.36",
    "mongoose": "^4.1.12"
  }
Feezy23
fuente
La mía estaba ligeramente relacionada, estaba usando mongod y no mobgo db .
Brad B
5

Desafortunadamente, todas las respuestas anteriores son solo la mitad correctas. Tomó mucho tiempo resolver esto ...

Mongoose bson instalar a través de npm lanza advertencia y provoca el error ...

npm install -g node-gyp

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

¡Esto funciona como magia!

Rama Prashanth
fuente
Esto falla con el error:$ 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

Para mí solo se necesita ejecutar estos comandos en mi directorio api:

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

Acabo de correr:

sudo npm install bson

y

sudo npm update

y todo se vuelve bien

V. Kovpak
fuente
Debe evitar ejecutar npm con derechos de sudo.
loganhuskins
Cualquier cosa que puedas evitar tener en el espacio de sudo, deberías. No creo que cause problemas graves, es solo una buena práctica. Aquí hay un artículo que puede ayudar (no puedo responder de otra manera que no sea que me guste John Papa). johnpapa.net/how-to-use-npm-global-without-sudo-on-osx
loganhuskins
3

El mensaje de extensión bson es solo una advertencia , lo recibo todo el tiempo en mi aplicación nodejs.

Cosas para verificar:

  • Instancia de MongoDB : ¿tiene una instancia de MongoDB ejecutándose?
  • Config : ¿Configuró correctamente Mongoose en su instancia de MongoDB? Sospecho que su configuración es incorrecta, porque el mensaje de error arroja una cadena muy extraña para el nombre de host del servidor mongodb.
Hendrikswan
fuente
Esa fue información útil. Con eso fuera de mi camino, descubrí que estaba mezclando la información de la cuenta de usuario de mongolab con la información real de usuario de mongodb para la base de datos.
Theja
Hmm, me encuentro con el mismo problema. Sin embargo, todo funcionaba en mi servidor de prueba local y estoy usando mongoHQ, así que no necesito una instancia de mongo local, ¿qué más podría estar saliendo mal?
Karoh
olvídate de eso, la respuesta de Pradeep a continuación resolvió que :)
Karoh
3

Arregle este problema en CentOS por

  • sudo yum groupinstall "Herramientas de desarrollo"
  • sudo npm install -g node-gyp
  • rm -r node_modules
  • npm cache clean
  • npm install
liudong
fuente
@Theja dijo que el error solo ocurre en la máquina con Windows.
Pawel Veselov
3

Lo arreglé cambiando la línea 10 de:

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

de:

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

a:

bson = require('bson');
jorgefpastor
fuente
3
Eso está haciendo que el paquete use una solución js pura, supongo
bolerovt
No estoy 100% seguro, pero he entendido que eso está evitando exactamente eso.
jorgefpastor
2

También tuve este problema y causó que mis sesiones no funcionaran. Pero tampoco para romper ...

Usé una conexión de mangosta.

Tuve esto:

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

Muy sencillo Pero la sesión solicitada permaneció siempre vacía.

rm -rf node_modules
npm cache clean
npm install

Hizo el truco. ¡Cuidado, no tienes un 'mongodb' en tu paquete.json! Solo Mongoose y connect-mongo.

KLoozen
fuente
2

Así es como solucioné el problema en 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

Inspirado por la respuesta de @mbochynski, pero primero tuve que crear un enlace simbólico; de lo contrario, la reconstrucción falló.

collimarco
fuente
2

Estaba teniendo los mismos problemas que probé tantas opciones, pero en el último npm intallen mi carpeta de aplicaciones promedio funcionó.

ashishkumar148
fuente
2

Tuve este problema porque estaba incluyendo la carpeta node_modules en mi repositorio de Git. Cuando reconstruí los node_modules en el otro sistema, funcionó. Uno de ellos estaba ejecutando Linux, el otro OS X. Quizás también tenían diferentes arquitecturas de procesador.

marcmtlca
fuente
1

Tuve el mismo problema en mi instancia EC2. Creo que la causa inicial fue porque tenía una instancia de Node ejecutándose cuando instalé Mongo. Detuve el servicio Node y luego corrí

sudo npm update 

dentro de la carpeta de nivel superior de mi proyecto de nodo. Esto solucionó el problema y todo estaba como nuevo

Lloyd Banks
fuente
1

Estaba tratando de ejecutar el nodo en la carpeta compartida de máquina virtual (vagabundo). Eso fue un problema. Mi máquina host es Windows, nodo instalado en Windows y funcionó de maravilla. Entonces, si está utilizando una máquina virtual, solo intente ejecutar el servidor de nodo en la máquina host.

Lukas Liesis
fuente
1

Simplemente tuve el mismo problema y, literalmente, nada funcionó para mí. El error que se estaba mostrando kerberosestá causando el problema y era una de las mongoosedependencias. Como estoy en Ubuntu, pensé que podría haber problemas de permisos en algún lugar entre los paquetes instalados globalmente, en /usr/lib/node_modulesvia sudo, y los que están en el espacio del usuario.

Lo instalé mongooseglobalmente, por sudosupuesto, y todo comenzó a funcionar como se esperaba.

PD El kerberospaquete ahora también se instala globalmente al lado mongoose, sin embargo, no puedo recordar si lo hice deliberadamente, mientras intentaba resolver el problema o si estaba allí desde el principio.

Mahdi
fuente
1

Estoy trabajando en Docker con centOS 7, y encontré el mismo problema.

después de mirar alrededor y hacer varios intentos, arreglé este problema instalando mongodb y mongodb-server

yum install mongodb mongodb-server

No creo que esta sea la mejor manera de producir el contenedor mínimo. pero puedo limitar el alcance en los siguientes paquetes

==============================================================================================================
 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
fuente
1

Pude resolver desinstalando y reinstalando el paquete monk. La instalación inicial aparentemente tenía una dependencia corrupta mongodb / bson.

johnkop
fuente
1

Followint @ user1548357 Decidí cambiar el archivo del módulo en sí. Para evitar los problemas señalados por los comentarios válidos a continuación, incluí mis cambios en un script posterior a la instalación para poder configurarlo y olvidarlo y tener la seguridad de que se ejecutará cuando se instalen mis módulos.

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

y el guión es:

// 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
fuente
1

elimine fácilmente el problema simplemente agregando esta línea, intente y capture la ruta de bloqueo: 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'); 

¡¡¡Eso es todo!!!

mallikarjuna gv
fuente
Hola, gracias por su respuesta. Utilice el formato en los ejemplos de código para que sea más fácil de leer para las personas.
F_SO_K
1

Lo único que me ayuda en Windows 7 (x64): https://stackoverflow.com/a/29714359/2670121

Vuelva a instalar el nodo y Python con versiones x32.
Pasé mucho tiempo con este error:

Error al cargar la extensión c ++ bson

y finalmente, cuando instalé el módulo node-gyp(para construir complementos nativos) e incluso instalé Windows SDK con visual studio - nodejs no reconoció el módulo ensamblado bson.nodecomo un módulo. Después de reinstalar el problema se ha ido.

De nuevo, ¿qué significa este error?

En realidad, ni siquiera es un error. Todavía puedes usar mangosta. Pero en este caso, en lugar de la rápida realización nativa del bsonmódulo, obtienes js-realization, que es más lento.

Vi muchos consejos como: "editar ruta en lo profundo de node_modules ...", que es totalmente inútil, porque no resuelve el problema, sino que simplemente apaga los mensajes de error.

Alendorff
fuente