Nie udało się załadować rozszerzenia bson c ++

185

Całkowita liczba węzłów tutaj. Próbowałem skonfigurować przykładową aplikację węzła, ale za każdym razem, gdy próbuję uruchomić, pojawia się następujący błąd:

aplikacja węzła

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
źródło
3
Błąd jest failed to connect totaki, więc myślę, że ta bsonwiadomość może być niezwiązana i właściwie nie ma znaczenia. Czy na pewno ustawienia połączenia Mongo są prawidłowe?
loganfsmyth
1
Zabawna historia Ten błąd pojawia się tylko na komputerze z systemem Windows ... nie próbowałem instalować node-gyp, ale próbowałem prawie wszystkiego innego i nadal pojawia się błąd. i chocoletey nie zainstalują niezbędnych elementów do kompilacji
Snymax,
Czy kod JS BSON nie jest teraz tak szybki jak C ++? Jeśli tak, czy to naprawdę problem?
UpTheCreek
Dla osób z nowszymi iojsami, które mają ten problem, otworzyłem bilet do śledzenia tego problemu: github.com/mongodb/js-bson/issues/136
bitinn
Uwaga: używam Keystone.js jako mojego środowiska mvc. Dla mnie zmieniasz „../build/Release/bson” na „../browser_build/bson”. Jeśli przejdziesz w górę, zobaczysz folder browser_build.
Pranay Pant

Odpowiedzi:

201

Wydaje mi się, że nie miałeś narzędzi do udostępniania, gdy instalowałeś swoją bibliotekę mongodb. Proponuję ci

xcode-select --install(na komputerze Mac) lub sudo apt-get install gcc make build-essential(na Ubuntu)

i biegnij

rm -rf node_modules
npm cache clean
npm install

LUB po prostu aktualizacja npm na podstawie komentarza @tobias (po instalacji niezbędnej do kompilacji)

npm update
Pradeep Mahdevu
źródło
2
+1. Wszystko, co musiałem zrobić, to ostatnie 3 linie - myślę, że powodem, dla którego mój nie został zbudowany, było to, że przyszedł jako część mongoskinmodułu.
Matt Browne
2
Łał! Ta sudo apt-get install gcc make build-essentialwskazówka jest jedną z najlepszych wskazówek dla deweloperów Node.js + Ubuntu, jakie kiedykolwiek widziałem. Jest to absolutnie zmieniacz gier, jeśli jesteś przyzwyczajony do tworzenia aplikacji internetowych i programowania w Node.js na Ubuntu.
Charney Kaye,
3
Jaki jest powód instalacji gcci makewraz z nią build-essential? To drugie zależy od dwóch pozostałych, więc i tak zostaną zainstalowane ( packages.ubuntu.com/trusty/build-essential ). Robienie sudo apt-get install build-essentialpowinno wystarczyć.
Siergiej
8
Co powiesz na Windows? Otrzymuję coś takiego w wierszu polecenia systemu Windows C: \ Users \ me> węzeł C: \ Users \ me \ Desktop \ nodeproject \ datagen.js {[Błąd: Nie można znaleźć modułu „../build/Release/bson” ] kod: „MODULE_NOT_FOUND”} js-bson: Nie udało się załadować rozszerzenia c ++ bson, używając czystej wersji JS {[Błąd: nie można znaleźć modułu ”../build/Release/bson”] kod: „MODULE_NOT_FOUND”} js-bson: Nie udało się załadować rozszerzenia bson c ++, używając wersji JS podłączonej poprawnie do serwera
ULLAS K
1
Co z maszynami do okien :(
Jamie Hutber
100

Właśnie to rozwiązałem.

Kiedy instalujesz moduł mangusty przez npm, nie ma on wbudowanego modułu bson w swoim folderze. W pliku node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.jszmień wiersz

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

do

bson = require('bson');

a następnie zainstaluj moduł bson za pomocą npm.

użytkownik1548357
źródło
36
czy warto zmieniać rzeczy w katalogu node_modules? To wydaje się kruche
Douglas Ferguson
6
@DouglasFerguson Nie bardzo. Jeśli edytujesz moduł node_, sugeruję rozwidlenie repozytorium i zainstalowanie zmodyfikowanego modułu przez npm / bower.
Christopher Marshall
4
Ta odpowiedź zadziałała. Devs at Mongoose, proszę to naprawić!
Steve K,
23
To jest hack, a nie naprawa.
Ashesh
10
To nie jest rozwiązanie. Z tym samym rezultatem możesz po prostu usunąć ciągi, które wypisują błąd. Ten błąd pojawia się z powodu nie znalezienia natywnej wtyczki c ++ dla bson iw tym przypadku i tak zostanie użyta realizacja js.
Alendorff
36

Rozwiązałem problem związany z uzyskiwaniem „Nie udało się załadować rozszerzenia bson c ++” w systemie raspbian (debian dla malin) według:

npm install -g node-gyp

i wtedy

npm update
Daniele Urania
źródło
3
Rozwiązałem problem po prostu przez uruchomienie npm update, nawet bez instalowania czegokolwiek innego.
MalcolmOcean
27

Nie byłem w stanie rozwiązać tego

do teraz. Przede wszystkim musisz mieć pakiety systemowe wymienione przez Pradeep Mahdevu. To są:

xcode-select --install (on a mac) 

lub

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

Potem zainstalowałem Gyp

npm install -g node-gyp 

jak powiedział datadracer, ale sugerowana przez niego aktualizacja npm jest ryzykowna. Aktualizuje wszystkie moduły, które mogą być niebezpieczne (czasami zmiany API między wersjami).

Sugeruję przejście do katalogu node_modules / mongodb / node_modules / bson i stamtąd użyj

node-gyp rebuild

To rozwiązało problem dla mnie.

Mbochynski
źródło
5
Co z oknami :(
Jamie Hutber
@JamieHutber Install VS 2013
Rahil Wazir
Robiłem to na wydaniu DietPi na 512 MB RP1. Chciałem tylko wspomnieć, że musiałem zainstalować Python ( apt-get install python), a następnie z poziomu node_modules/mongoose/node_modules/mongodb/node_modules/bson/uruchamiania make. To stworzyło Release/bson.node.
staticboy
20

Częstym problemem jest to, że węzeł-gyp wymaga Pythona 2.x i jeśli twój system pythonwskazuje na 3.x, kompilacja nie powiedzie się bsonbez ostrzeżenia. Możesz to naprawić, ustawiając pythonglobalny klucz w konfiguracji npm, który wskazuje na plik wykonywalny 2.x w twoim systemie. Na przykład w Arch Linux:

npm config -g set python "/usr/bin/python2"
neverfox
źródło
19

W WIN 8.1

Wygląda na to, że użyłem niewłaściwej wersji mangusty package.json pliku.

Usunąłem linię "mongoose" : "^3.8.15"zpackage.json .

CLI:

npm install mongoose --save

Teraz mówi "mongoose": "^4.0.6"się package.json, a błąd miałem już nie ma.

Dąb
źródło
Dziękuję Ci! Uratowałeś mnie od niezliczonych godzin walenia głową w klawiaturę. To było ostatnie i jedyne rozwiązanie, które działało w systemie Windows. Problem polegał na tym, że korzystałem z wersji 3.x mongoose, która wyglądała na niezgodną z najnowszą instalacją mongodb na moim komputerze.
Wyzwanie
To w końcu sprawiło, że uruchomiłem również Ubuntu.
Jason Kennaly,
Tak, działa również na Macu. Dzięki!
jos
Wielkie dzięki! Postępując zgodnie z sesją szkoleniową Microsoft „Masz dokumenty! Szybki start MongoDB” i wystąpił ten sam błąd, związany tylko z pakietem mongodb - zrobił powyższe kroki dla tego i na pewno już działa! :)
Fernando Madruga
11

Używam Ubuntu 14.04 i aby to naprawić, musiałem utworzyć dowiązanie symboliczne dla węzła, aby wskazywał na nodejs jak opisano tutaj:

nodejs vs node na Ubuntu 12.04

Kiedy to zrobiłem, ponownie uruchomiłem następujące polecenia:

rm -rf node_modules
npm cache clean
npm install
Anthony
źródło
Świetny Anthony! Korzystam również z systemu Ubuntu 14.04, a twoja sugestia rozwiązała dla mnie problem. Nie wystarczy zainstalować niezbędną do kompilacji i ponownie zainstalować wszystko: musiałem także dodać węzeł ln.
Franco
8

Więc w moim przypadku najpierw próbowałem sprawdzić w tym katalogu / node_modules / mongoose / node_modules / , tylko po to, aby potwierdzić, że mam moduł bson . Doszedłem do wniosku, że nie mam go w pierwszej kolejności, a potem po prostu biegnę

npm zainstaluj bson 

i wtedy

aktualizacja npm

Wszystko zostało posortowane. Wypróbowane i przetestowane w Ubuntu.

Steven
źródło
pracował dla mnie, jak dobrze, ale ja również wpisany makew/devel/node_modules/bson/
exebook
1
Pracował dla mnie. Czyszczenie pamięci podręcznej npm nie. Właściwie wszystko, co zrobiłem, to z / node_modules / mongoose npm install bson
run
8

chciałem tylko powiedzieć, że również miałem błąd

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

Ale bez innych błędów. Próbowałem wszystkiego i okazało się, że sterowniki mongodb, które określiłem w pliku package.json, były niezgodne z moją wersją MongoDB. Zmieniłem go do mojej najnowszej wersji (1.4.34) i działało !!!

marynata
źródło
rzeczywiście npm instalacja mongodb @ najnowsze rozwiązał dla mnie problem
tam.teixeira
8

sudo npm rebuild właśnie to mnie naprawiło.

Zach Dahl
źródło
8

W końcu poprawiłem ten błąd, aktualizując moją wersję zależności mongodb do ~ 2.0.36 w package.json.

 "dependencies": {
    "consolidate": "~0.9.1",
    "express": "3.x",
    "mongodb": "~2.0.36",
    "mongoose": "^4.1.12"
  }
Feezy23
źródło
Mój był nieco spokrewniony, używałem mongod, a nie mobgo db .
Brad B
5

Niestety, wszystkie powyższe odpowiedzi są tylko w połowie poprawne. Długo to trwało.

Mongoose bson install przez npm rzuca ostrzeżenie i powoduje błąd ...

npm install -g node-gyp

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

To działa jak magia !!

Rama Prashanth
źródło
Błąd kończy się niepowodzeniem:$ 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

Dla mnie wystarczy uruchomić następujące polecenia w katalogu api:

rm -rf node_modules
npm cache clean 
npm install
Adam Gądziak
źródło
4

Właśnie pobiegłem:

sudo npm install bson

i

sudo npm update

i wszystko jest w porządku.

V. Kovpak
źródło
Powinieneś bardzo unikać uruchamiania npm z prawami sudo.
loganhuskins
Wszystko, czego możesz uniknąć w przestrzeni sudo, powinieneś. Nie sądzę, że spowoduje to poważne problemy, to tylko dobra praktyka. Oto artykuł, który może pomóc (nie może ręczyć za to inaczej niż polubienie Johna Papy). johnpapa.net/how-to-use-npm-global-without-sudo-on-osx
loganhuskins
3

Komunikat rozszerzenia bson jest tylko ostrzeżeniem , cały czas otrzymuję go w mojej aplikacji nodejs.

Rzeczy do sprawdzenia:

  • Instancja MongoDB : Czy masz uruchomioną instancję MongoDB?
  • Config : Czy poprawnie skonfigurowałeś Mongoose do instancji MongoDB? Podejrzewam, że twoja konfiguracja jest nieprawidłowa, ponieważ komunikat o błędzie wyrzuca bardzo dziwny ciąg nazwy hosta serwera mongodb.
hendrikswan
źródło
To była przydatna informacja. W ten sposób zorientowałem się, że pomieszałem informacje o koncie użytkownika mongolab z faktycznymi danymi użytkownika mongodb dla bazy danych.
Theja
Hmm, mam ten sam problem. Wszystko działało na moim lokalnym serwerze testowym i używam mongoHQ, więc nie potrzebuję lokalnej instancji mongo, co jeszcze może pójść nie tak?
Karoh
zapomnij o tym, odpowiedź Pradeep poniżej rozwiązała ten problem :)
Karoh
3

Rozwiązałem ten problem na CentOS przez

  • sudo yum groupinstall „Narzędzia programistyczne”
  • sudo npm install -g node-gyp
  • rm -r moduły_węzła
  • czyszczenie pamięci podręcznej npm
  • instalacja npm
liudong
źródło
@Theja powiedziała, że ​​błąd występuje tylko na komputerze z systemem Windows.
Paweł Veselov
3

Naprawiłem to, zmieniając wiersz 10:

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

z:

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

do:

bson = require('bson');
jorgefpastor
źródło
3
To chyba sprawia, że ​​pakiet używa czystego rozwiązania js
bolerovt
Nie jestem w 100% pewien, ale zrozumiałem, że właśnie tego unikam.
jorgefpastor
2

Mam również ten problem, który spowodował, że moje sesje nie działały. Ale żeby nie złamać ...

Użyłem połączenia mangusty.

Miałem to:

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

Bardzo proste. Ale wymaganie pozostało zawsze puste.

rm -rf node_modules
npm cache clean
npm install

Wykonał lewę. Uważaj, że nie masz „mongodb” w pakiecie.json! Tylko Mongoose i Connect-Mongo.

KLoozen
źródło
2

Oto jak naprawiłem problem na 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

Zainspirowany odpowiedzią @mbochynski, ale najpierw musiałem utworzyć dowiązanie symboliczne, w przeciwnym razie przebudowa się nie powiedzie.

Collimarco
źródło
2

Miałem takie same problemy, wypróbowałem tak wiele opcji, ale w ostatniej npm intallw mojej średniej działał folder aplikacji.

ashishkumar148
źródło
2

Miałem ten problem, ponieważ dołączałem folder node_modules do mojego repozytorium Git. Kiedy odbudowałem node_modules w innym systemie, zadziałało. Jeden z nich działał na Linuksie, drugi OS X. Być może mieli też inną architekturę procesorów.

marcmtlca
źródło
1

Miałem ten sam problem z moją instancją EC2. Myślę, że początkowa przyczyna była spowodowana działaniem instancji Node podczas instalacji Mongo. Zatrzymałem usługę Węzeł, a następnie uruchomiłem

sudo npm update 

wewnątrz folderu najwyższego poziomu mojego projektu węzła. To naprawiło problem i wszystko było jak nowe

Lloyd Banks
źródło
1

Próbowałem uruchomić węzeł na folderze współdzielonym maszyny wirtualnej (włóczęga). To był problem. Mój komputer hosta to system Windows, zainstalowany węzeł w systemie Windows i działał jak urok. Więc jeśli używasz maszyny wirtualnej, po prostu spróbuj uruchomić serwer węzłów na maszynie hosta.

Lukas Liesis
źródło
1

Właśnie miałem ten sam problem i dosłownie nic nie działało dla mnie. Wyświetlany błąd kerberosjest przyczyną problemu i była to jedna z mongoosezależności. Ponieważ jestem na Ubuntu, pomyślałem, że mogą wystąpić problemy z uprawnieniami między zainstalowanymi globalnie pakietami - /usr/lib/node_modulesprzez viasudo , a tymi, które znajdują się w przestrzeni użytkownika.

Zainstalowałem mongooseglobalnie - i sudooczywiście wszystko zaczęło działać zgodnie z oczekiwaniami.

PS kerberosPakiet jest teraz również instalowany globalnie obok mongoose, jednak nie pamiętam, czy zrobiłem to celowo - podczas próby rozwiązania problemu, czy też był on od początku.

Mahdi
źródło
1

Pracuję nad Dockerem z centOS 7 i napotkałem ten sam problem.

po rozejrzeniu się i kilku próbach naprawiłem ten problem, instalując mongodb i mongodb-server

yum install mongodb mongodb-server

Nie sądzę, że to najlepszy sposób na wyprodukowanie minimalnego pojemnika. ale mogę ograniczyć zakres do następujących pakietów

==============================================================================================================
 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
źródło
1

Rozwiązałem problem, odinstalowując i ponownie instalując pakiet mnicha. Pierwsza instalacja najwyraźniej miała uszkodzoną zależność mongodb / bson.

johnkop
źródło
1

Followint @ user1548357 Postanowiłem zmienić sam plik modułu. Aby uniknąć problemów wskazanych w poprawnych komentarzach poniżej, dołączyłem moje zmiany do skryptu poinstalacyjnego, abym mógł go ustawić, zapomnieć i mieć pewność, że uruchomi się po zainstalowaniu moich modułów.

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

a skrypt jest:

// 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.
źródło
1

łatwo wykop problem, po prostu dodając tę ​​linię, spróbuj złapać ścieżkę bloku: 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'); 

To wszystko!!!

mallikarjuna gv
źródło
Cześć, dzięki za odpowiedź. Skorzystaj z formatowania przykładów kodu, aby ułatwić ich czytanie.
F_SO_K
1

Jedyną rzeczą, która pomaga mi w systemie Windows 7 (x64): https://stackoverflow.com/a/29714359/2670121

Ponownie zainstaluj węzeł i python w wersjach x32.
Spędziłem dużo czasu z tym błędem:

Nie udało się załadować rozszerzenia bson c ++

i wreszcie, kiedy zainstalowałem moduł node-gyp(do budowania natywnych dodatków), a nawet zainstalowałem Windows SDK ze Visual Studio - nodejs nie rozpoznał zmontowanego modułu bson.nodejako modułu. Po ponownej instalacji problem zniknął.

Znowu, co oznacza ten błąd?

Właściwie to nawet nie błąd. Nadal możesz używać mangusty. Ale w tym przypadku, zamiast szybkiej natywnej realizacji bsonmodułu, maszjs-realization , co jest wolniejsze.

Widziałem wiele wskazówek, takich jak: „edytuj ścieżkę głęboko w module_węzła ...” - co jest całkowicie bezużyteczne, ponieważ nie rozwiązuje problemu, a jedynie wyłącza komunikaty o błędach.

Alendorff
źródło