Caricamento dell'estensione cson c ++ non riuscito


185

Un nodo totale qui. Ho provato a configurare un'app di nodo di esempio ma il seguente errore continua ad apparire ogni volta che provo a eseguire:

app 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
L'errore è failed to connect to, quindi penso che il bsonmessaggio potrebbe non essere correlato e non avere importanza. Sei sicuro che le impostazioni della tua connessione Mongo siano corrette?
loganfsmyth,

1
Storia divertente Ho solo questo errore su una macchina Windows ... non ho mai provato a installare node-gyp ma ho provato quasi tutto il resto e ancora l'errore. e il cioccolato non installerà build essentials
Snymax,

Il codice JS BSON non è veloce tanto quanto il C ++ adesso? Se è così, è davvero un problema?
UpTheCreek,

Per le persone con i nuovi iojs che hanno riscontrato questo problema, ho aperto un ticket per tracciare questo problema: github.com/mongodb/js-bson/issues/136
bitinn

Nota: sto usando Keystone.js come il mio framework mvc. Per me, cambi "../build/Release/bson" in "../browser_build/bson". Se vai su, vedi la cartella browser_build.
Pranay Pant,

Risposte:


201

Immagino che non avessi gli strumenti di creazione disponibili quando hai installato la tua libreria mongodb. Ti suggerisco di farlo

xcode-select --install(su un Mac) o sudo apt-get install gcc make build-essential(su Ubuntu)

e corri

rm -rf node_modules
npm cache clean
npm install

O solo l'aggiornamento di npm basato sul commento @tobias (dopo l'installazione di build-essential)

npm update

2
+1. Tutto quello che dovevo fare erano le ultime 3 righe - penso che il motivo per cui la mia non è stata costruita fosse perché faceva parte del mongoskinmodulo.
Matt Browne,

2
Wow! Quel sudo apt-get install gcc make build-essentialsuggerimento è uno dei migliori consigli di sviluppo di Node.js + Ubuntu che abbia mai visto. È un cambio di gioco assoluto se sei abituato a sviluppare applicazioni Web e sviluppare solo con Node.js su Ubuntu.
Charney Kaye,

3
Qual è il motivo dell'installazione gcce makeinsieme build-essential? Quest'ultimo dipende dagli altri due, quindi verranno installati comunque ( pacchetti.ubuntu.com/trusty/build-essential ). Fare sudo apt-get install build-essentialdovrebbe essere abbastanza.
Sergey,

8
Che ne dici di windows ?? Ricevo qualcosa del genere sul mio prompt dei comandi di Windows C: \ Users \ me> nodo C: \ Users \ me \ Desktop \ nodeproject \ datagen.js {[Errore: impossibile trovare il modulo '../build/Release/bson' ] codice: 'MODULE_NOT_FOUND'} js-bson: impossibile caricare l'estensione cson bson, utilizzando la versione JS pura {[Errore: impossibile trovare il modulo '../build/Release/bson'] codice: 'MODULE_NOT_FOUND'} js-bson: Impossibile caricare l'estensione cson bson, utilizzando la versione JS pura Connesso correttamente al server
ULLAS K

1
Che dire delle macchine per finestre :(
Jamie Hutber il

100

L'ho appena risolto.

Quando installi il modulo mongoose di npm, non ha un modulo bson incorporato nella sua cartella. Nel file node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js, cambia la riga

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

per

bson = require('bson');

e quindi installare il modulo bson usando npm.


36
è una buona idea cambiare le cose all'interno della directory node_modules? Sembra fragile
Douglas Ferguson il

6
@DouglasFerguson Non proprio. Se modifichi un node_module, suggerirei di creare un repository e installare il modulo modificato tramite npm / bower.
Christopher Marshall,

4
Questa risposta ha funzionato. Devs at Mongoose, per favore, risolvete questo problema!
Steve K,

23
Questo è un trucco, non una correzione.
Ashesh,

10
Questa non è una soluzione. Con lo stesso risultato puoi semplicemente rimuovere le stringhe che stampano errori. Questo errore appare a causa del plug-in c ++ nativo per bson non trovato e in questo caso verrà comunque utilizzata la realizzazione js.
Alendorff,

36

Ho risolto il problema di ottenere "Impossibile caricare l'estensione cson bson" su raspbian (debian per raspberry) per:

npm install -g node-gyp

e poi

npm update

3
Ho risolto il mio problema semplicemente correndo npm update, senza nemmeno installare altro.
MalcolmOcean

27

Non sono stato in grado di risolverlo

fino ad ora. Prima di tutto devi avere i pacchetti di sistema menzionati da Pradeep Mahdevu. Quelli sono:

xcode-select --install (on a mac) 

o

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

Quindi ho installato node-gyp

npm install -g node-gyp 

come diceva Datadracer ma l'aggiornamento npm da lui suggerito è rischioso. Aggiorna tutti i moduli, il che può essere pericoloso (a volte le modifiche API tra le versioni).

Suggerisco di andare nella directory node_modules / mongodb / node_modules / bson e da lì usare

node-gyp rebuild

Ciò ha risolto il problema per me.


5
Che dire di Windows :(
Jamie Hutber,

@JamieHutber Installa VS 2013
Rahil Wazir l'

Lo stavo facendo in una versione di DietPi su un RP1 da 512 MB. Volevo solo detto che ho dovuto installare Python ( apt-get install python) e poi da dentro node_modules/mongoose/node_modules/mongodb/node_modules/bson/run make. Questo creato Release/bson.node.
staticboy,

20

Un problema comune è che node-gyp richiede Python 2.xe se il tuo sistema pythonpunta a 3.x, non verrà compilato bson, senza preavviso. È possibile risolvere questo problema impostando una pythonchiave globale nella configurazione di npm che punta all'eseguibile 2.x sul proprio sistema. Ad esempio, su Arch Linux:

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

19

Su WIN 8.1

Sembra che abbia usato una versione errata di mangusta nel mio package.jsonfile.

Ho rimosso la linea "mongoose" : "^3.8.15"da package.json.

CLI:

npm install mongoose --save

Ora dice "mongoose": "^4.0.6"in package.jsone l'errore che ho avuto è andato.


Grazie! Mi hai salvato da innumerevoli ore di colpi di testa sulla tastiera. Questa è stata l'ultima e l'unica soluzione che ha funzionato su Windows. Il problema era che stavo eseguendo una versione 3.x di mangusta che sembrava incompatibile con l'ultima installazione di mongodb sul mio pc.
Sfida

Questo finalmente mi ha fatto funzionare anche su Ubuntu.
Jason Kennaly,

Sì, anche su Mac. Grazie!
jos,

Grazie mille! In seguito alla sessione di formazione "You have Got Documents! A MongoDB Jump Start" di Microsoft e si è verificato lo stesso errore, relativo solo al pacchetto mongodb, ha fatto i passaggi precedenti per quello e abbastanza sicuro, ora è in esecuzione! :)
Fernando Madruga,

11

Sto eseguendo Ubuntu 14.04 e per risolverlo ho dovuto creare un collegamento simbolico per il nodo per puntare a nodejs come descritto qui:

nodejs vs node su ubuntu 12.04

Una volta fatto ciò, ho eseguito nuovamente questi comandi:

rm -rf node_modules
npm cache clean
npm install

Grande Anthony! Sono anche in esecuzione su Ubuntu 14.04 e il tuo suggerimento ha risolto il problema per me. Non è sufficiente installare build-essential e reinstallare tutto: ho anche dovuto aggiungere il 'nodo' ln.
Franco,

8

Quindi nel mio caso, ho prima provato a controllare in questa directory / node_modules / mongoose / node_modules / , solo per confermare che ho il codice modulo . Ho capito che non ce l'avevo in primo luogo, quindi ho appena corso

npm installa bson 

e poi

aggiornamento npm

Tutti sono stati ordinati. Provati e testati su Ubuntu.


lavorato anche per me, ma ho anche digitato makein/devel/node_modules/bson/
ExeBook

1
Ha funzionato per me. La pulizia della cache npm no. In realtà, tutto ciò che ho fatto è stato da / node_modules / mongoose eseguitonpm install bson
RichieRich

8

volevo solo dire che ho avuto anche l'errore

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

Ma senza nessuno degli altri errori. Ho provato di tutto e ho scoperto che i driver mongodb che stavo specificando nel file package.json erano incompatibili con la mia versione di MongoDB. L'ho cambiato alla mia ultima versione che era (1.4.34) e ha funzionato !!!


infatti npm install mongodb @ latest risolto per me il problema
tam.teixeira


8

Ho finalmente corretto questo errore aggiornando la mia versione di dipendenza mongodb a ~ 2.0.36 in package.json.

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

Il mio era leggermente correlato, stavo usando mongod e non mobgo db .
Brad B,

5

Sfortunatamente, tutte le risposte di cui sopra sono solo la metà. Ho impiegato molto tempo per capirlo ..

Mongoose bson si installa tramite npm genera un avviso e causa l'errore ...

npm install -g node-gyp

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

Funziona come per magia !!


Questo non riesce con errore:$ 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

Per me basta eseguire questi comandi nella mia directory api:

rm -rf node_modules
npm cache clean 
npm install


3

Il messaggio di estensione bson è solo un avvertimento , lo ricevo sempre nella mia applicazione nodejs.

Cose da controllare:

  • Istanza MongoDB : hai un'istanza MongoDB in esecuzione?
  • Config : Hai configurato correttamente Mongoose sulla tua istanza MongoDB? Ho il sospetto che la tua configurazione sia sbagliata, perché il messaggio di errore sputa una strana stringa per il nome host del tuo server mongodb ..

Quella era un'informazione utile. A parte questo, ho capito che stavo mescolando le informazioni dell'account utente mongolab con le informazioni utente mongodb effettive per il database.
Theja,

Hmm, sto incontrando lo stesso problema. Tutto funzionava sul mio server di test locale e sto usando mongoHQ, quindi non ho bisogno di un'istanza di mongo locale, cos'altro potrebbe andare storto?
Karoh,

non
pensarci

3

Ho risolto questo problema su CentOS di

  • sudo yum groupinstall "Strumenti di sviluppo"
  • sudo npm installa -g node-gyp
  • rm -r node_modules
  • npm cache clean
  • npm install

@Theja ha detto che l'errore si verifica solo su macchine Windows.
Pawel Veselov,

3

L'ho risolto cambiando la riga 10 di:

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

a partire dal:

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

per:

bson = require('bson');

3
Questo fa

Non ne sono sicuro al 100%, ma ho capito che sta evitando esattamente questo.
jorgefpastor,

2

Ho anche avuto questo problema e le mie sessioni non hanno funzionato. Ma non rompere neanche ...

Ho usato una connessione di mangusta.

Ho avuto questo:

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

Molto semplice. Ma req.session è rimasto sempre vuoto.

rm -rf node_modules
npm cache clean
npm install

Ha fatto il trucco. Fai attenzione, non hai un "mongodb" nel tuo package.json! Solo Mongoose e connect-mongo.


2

Ecco come ho risolto il problema su 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

Ispirato dalla risposta di @mbochynski, ma prima dovevo creare un collegamento simbolico, altrimenti la ricostruzione non è riuscita.


2

stavo avendo lo stesso problema provato così tante opzioni ma nell'ultimo npm intallnella mia cartella media dell'app ha funzionato.


2

Ho avuto questo problema perché stavo includendo la cartella node_modules nel mio repository Git. Quando ho ricostruito i node_modules sull'altro sistema ha funzionato. Uno di questi eseguiva Linux, l'altro OS X. Forse avevano anche architetture di processori diverse.


1

Ho avuto lo stesso problema sulla mia istanza EC2. Penso che la causa iniziale sia stata perché avevo installato un'istanza Node quando ho installato Mongo. Ho interrotto il servizio Node e quindi ho eseguito

sudo npm update 

all'interno della cartella di livello superiore del mio progetto nodo. Ciò ha risolto il problema e tutto era come nuovo


1

Stavo cercando di eseguire il nodo sulla cartella condivisa della macchina virtuale (vagabonda). Quello era un problema. La mia macchina host è Windows, nodo installato su Windows e ha funzionato come un fascino. Quindi, se si utilizza la macchina virtuale, provare a eseguire il server nodo sulla macchina host.


1

Ho avuto lo stesso problema e letteralmente niente ha funzionato per me. L'errore mostrato stava kerberoscausando il problema ed era uno deimongoose dipendenze. Dato che sono su Ubuntu, ho pensato che potessero esserci problemi di autorizzazione tra i pacchetti installati a livello globale - in /usr/lib/node_modulesvia sudoe quelli che si trovano nello spazio utente.

Ho installato mongoose livello globale - consudo , ovviamente con tutto e tutto ha iniziato a funzionare come previsto.

PS Il kerberospacchetto ora è installato anche a livello globale accanto mongoose, tuttavia non ricordo se l'ho fatto deliberatamente, mentre cercavo di risolvere il problema o se era presente dall'inizio.


1

Sto lavorando su Docker con centOS 7 e ho riscontrato lo stesso problema.

dopo essermi guardato intorno e aver fatto diversi tentativi, ho risolto questo problema installando mongodb e mongodb-server

yum install mongodb mongodb-server

Non penso che questo sia il modo migliore per produrre il contenitore minimo. ma posso limitare l'ambito nei seguenti pacchetti

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

Sono stato in grado di risolvere disinstallando e reinstallando il pacchetto monaco. L'installazione iniziale apparentemente aveva una dipendenza mongodb / bson corrotta.


1

Followint @ user1548357 Ho deciso di modificare il file del modulo stesso. Al fine di evitare i problemi segnalati dai commenti validi di seguito, ho incluso le mie modifiche in uno script postinstallazione in modo da poterlo impostare, dimenticarlo e assicurarsi che verrà eseguito quando i miei moduli sono installati.

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

e la sceneggiatura è:

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

eliminare facilmente il problema semplicemente aggiungendo questa riga, sia provare a catturare il percorso del blocco: 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'); 

Questo è tutto!!!


Ciao, grazie per la tua risposta. Si prega di utilizzare la formattazione su esempi di codice per renderli più facili da leggere per le persone.
F_SO_K

1

L'unica cosa che mi aiuta su Windows 7 (x64): https://stackoverflow.com/a/29714359/2670121

Reinstalla nodo e python con le versioni x32.
Ho trascorso molto tempo con questo errore:

Caricamento dell'estensione cson c ++ non riuscito

e infine, quando ho installato il modulo node-gyp(per la creazione di addon nativi) e persino installato Windows SDK con Visual Studio - nodejs non riconosceva il modulo assemblatobson.node come modulo. Dopo aver reinstallato il problema non c'è più.

Ancora una volta, cosa significa questo errore?

In realtà, non è nemmeno un errore. Puoi ancora usare la mangusta. Ma in questo caso, invece della rapida realizzazione nativa del bsonmodulo, hai ottenuto js-realization, che è più lento.

Ho visto molti suggerimenti come: "modifica percorso in profondità all'interno di node_modules ..." - che è totalmente inutile, perché non risolve il problema, ma ha semplicemente disattivato i messaggi di errore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.