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)

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

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.


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

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í.


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"

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.


¡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

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.


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ó!


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


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"
  }

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!


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


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.

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

@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');

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.


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ó.


2

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


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.


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


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.


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.


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


1

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


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

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!!!


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.