C ++ bson uzantısı yüklenemedi


185

Burada toplam bir düğüm noktası. Örnek bir düğüm uygulaması kurmaya çalışıyorum, ancak her hata çalıştırmaya çalıştığımda aşağıdaki hata ortaya çıkıyor:

düğüm uygulaması

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
Hata failed to connect to, bu yüzden bsonmesajın ilgisiz olabileceğini ve aslında önemli olmadığını düşünüyorum . Mongo bağlantı ayarlarınızın doğru olduğundan emin misiniz?
loganfsmyth

1
Komik hikaye Ben sadece bir Windows makinede bu hatayı alıyorum ... düğüm düğüm-gyp yüklemeye çalıştı ama ive hemen hemen her şeyi denedim ve hala hatayı alıyorum. ve chocoletey kurmak gerekli olmaz
Snymax

JS BSON kodu neredeyse C ++ kadar hızlı değil mi? Eğer öyleyse, bu gerçekten bir sorun mu?
UpTheCreek

Bu sorunu yaşayan yeni iojs'lu insanlar için, bu sorunu izlemek için bir bilet açtım: github.com/mongodb/js-bson/issues/136
bitinn

Not: Keystone.js'yi mvc çerçevem ​​olarak kullanıyorum. Benim için "../build/Release/bson" ifadesini "../browser_build/bson" olarak değiştirirsiniz. Yukarı çıkarsanız, browser_build klasörünü görürsünüz.
Pranay Pant

Yanıtlar:


201

Mongodb kütüphanenizi kurduğunuzda mevcut araçlara sahip olmadığınızı tahmin ediyorum. Yapmanızı öneririm

xcode-select --install(mac'ta) veya sudo apt-get install gcc make build-essential(ubuntu'da)

ve koş

rm -rf node_modules
npm cache clean
npm install

VEYA @tobias yorumuna dayanarak sadece npm güncellemesi (derleme kurulduktan sonra)

npm update

2
+1. Tek yapmam gereken son 3 satırdı - bence benim inşa edilmemesinin nedeni mongoskinmodülün bir parçası olmasıydı .
Matt Browne

2
Vaov! Bu sudo apt-get install gcc make build-essentialipucu, şimdiye kadar gördüğüm en iyi Node.js + Ubuntu geliştirme ipuçlarından biridir. Web uygulamaları geliştirmek ve sadece Ubuntu'da Node.js ile geliştirmek için alışkınsanız, mutlak bir oyun değiştirici.
Charney Kaye

3
Yüklemenin gccve makebununla birlikte neden build-essential? İkincisi diğer ikisine bağlıdır, bu yüzden yine de yükleneceklerdir ( Packages.ubuntu.com/trusty/build-essential ). Yapmak sudo apt-get install build-essentialyeterli olmalı.
Sergey

8
Peki ya pencerelerde? Windows komut istemimde böyle bir şey alıyorum C: \ Kullanıcılar \ me> düğüm C: \ Kullanıcılar \ me \ Masaüstü \ nodeproject \ datagen.js {[Hata: '../build/Release/bson' modülü bulunamıyor ] kod: 'MODULE_NOT_FOUND'} js-bson: Saf JS sürümü kullanılarak c ++ bson uzantısı yüklenemedi {[Hata: '../build/Release/bson'] kodu bulunamıyor: js-bson: MODULE_NOT_FOUND:} Saf JS sürümünü kullanarak c ++ bson uzantısı yüklenemedi Sunucuya doğru şekilde bağlandı
ULLAS K

1
Pencere makineleri hakkında :(
Jamie Hutber

100

Sadece çözdüm.

Mongoose modülünü npm ile kurduğunuzda, klasöründe yerleşik bir bson modülü yoktur. Dosyada node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.jssatırı değiştirin

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

için

bson = require('bson');

ve sonra bson modülünü npm kullanarak kurun.


36
node_modules dizini içindeki şeyleri değiştirmek iyi bir fikir mi? Bu kırılgan görünüyor
Douglas Ferguson

6
@DouglasFerguson Pek değil. Bir node_module'u düzenlerseniz, repoyu çatallamanızı ve değiştirilen modülü npm / bower ile kurmanızı öneririm.
Christopher Marshall

4
Bu cevap işe yaradı. Mongoose'daki geliştiriciler, lütfen bunu düzeltin!
Steve K

23
Bu bir hack, bir düzeltme değil.
Ashesh

10
Bu bir çözüm değil. Aynı sonuçla, sadece hata yazdıran dizeleri kaldırabilirsiniz. Bu hata, bson için yerel c ++ eklentisi bulunamadığı için ortaya çıkar ve bu durumda js gerçekleştirme yine de kullanılır.
Alendorff

36

Ahududu (ahududu için debian) "c ++ bson uzantısı yüklenemedi" alma sorunu sıralama:

npm install -g node-gyp

ve sonra

npm update

3
Sorunumu sadece npm updatebaşka bir şey kurmadan çalıştırarak çözdüm.
MalcolmOcean

27

Bunu çözemedim

şimdiye kadar. Öncelikle Pradeep Mahdevu tarafından belirtilen sistem paketlerine sahip olmalısınız. Onlar:

xcode-select --install (on a mac) 

veya

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

Sonra node-gyp'i kurdum

npm install -g node-gyp 

gibi datadracer dedi ama onun tarafından önerilen npm güncelleme riskli. Tehlikeli olabilecek tüm modülleri günceller (bazen sürümler arasında API değişiklikleri).

Ben node_modules / mongodb / node_modules / bson dizinine girmenizi ve oradan kullanmanızı öneririm

node-gyp rebuild

Bu benim için problemi çözdü.


5
Pencerelere ne dersiniz :(
Jamie Hutber

@JamieHutber VS 2013
Rahil Wazir

Bunu 512MB RP1'de bir DietPi sürümünde yapıyordum . Sadece Python ( apt-get install python) ve sonra içinden node_modules/mongoose/node_modules/mongodb/node_modules/bson/çalıştırmak zorunda bahsetmek istedim make. Bu yaratıldı Release/bson.node.
staticboy

20

Yaygın bir sorun, node-gyp'in Python 2.x gerektirmesi ve sisteminizin 3.x'i pythonişaret etmesi durumunda bsonuyarı yapmadan derlenemeyecektir . Bunu, pythonnpm yapılandırmanızda sisteminizdeki 2.x yürütülebilir dosyasına işaret eden bir genel anahtar ayarlayarak düzeltebilirsiniz . Örneğin, Arch Linux'ta:

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

19

WIN 8.1'de

Görünüşe göre dosyamda yanlış bir mongoose sürümü kullandım package.json.

Çizgiyi uzaklaştırıldı "mongoose" : "^3.8.15"den package.json.

CLI:

npm install mongoose --save

Şimdi diyor "mongoose": "^4.0.6"içinde package.jsonve ben hata kayboldu.


Teşekkür ederim! Beni klavyedeki sayısız saat başı ezmekten kurtardın. Bu, pencerelerde çalışan son ve tek çözümdü. Sorun benim pc son mongodb yükleme ile uyumsuz görünen mongoose bir sürüm 3.x çalıştırıyordu oldu.
ChallengeAccepted

Bu sonunda beni Ubuntu'da da çalıştırdı.
Jason Kennaly

Evet, Mac'te de çalışıyor. Teşekkürler!
jos

Çok teşekkürler! Microsoft'un "Belgeleriniz Var! Bir MongoDB Jump Start" eğitim oturumunun ardından ve aynı hatayla karşılaştık, yalnızca mongodb paketiyle ilgili - yukarıdaki adımlar bu işlem için yeterli ve şu anda çalışıyor! :)
Fernando Madruga

11

Ubuntu 14.04 çalıştırıyorum ve benim için düzeltmek için burada açıklandığı gibi düğüm nodejs işaret düğüm için bir symlink oluşturmak zorunda kaldı:

nodejs vs node üzerinde ubuntu 12.04

Bunu yaptıktan sonra bu komutları yeniden çalıştırdım:

rm -rf node_modules
npm cache clean
npm install

Büyük Anthony! Ben de Ubuntu 14.04 üzerinde çalışıyorum ve öneriniz benim için sorunu çözdü. Yapım temelini kurmak ve her şeyi yeniden yüklemek yeterli değildir: Ben de 'düğüm' ln eklemek zorunda kaldı.
Franco

8

Yani benim durumumda, ben sadece bson modülüne sahip olduğumu doğrulamak için bu dizin / node_modules / mongoose / node_modules / altında kontrol etmeye çalıştım . İlk başta sahip olmadığımı anladım, sonra koştum

npm yükleme bson 

ve sonra

npm güncellemesi

Hepsi sıralandı. Ubuntu'da denendi ve test edildi.


Benim için de çalışmış, ama ben de daktilo makeiçinde/devel/node_modules/bson/
exebook

1
Benim için çalıştı. Npm önbellek Temizleme vermedi. Aslında tek yaptığım / node_modules / mongoose koştunpm install bson
RichieRich

8

sadece hataya sahip olduğumu söylemek istedim

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

Ama diğer hataların hiçbiri ile. Her şeyi denedim ve package.json dosyasında belirlediğim mongodb sürücülerinin MongoDB sürümümle uyumsuz olduğunu gördüm. Ben (1.4.34) olan son sürümüm için değiştirdim ve çalıştı !!!


gerçekten npm yüklemek mongodb @ en son benim için sorunu çözdü
tam.teixeira


8

Sonunda benim mongodb bağımlılık sürümünü güncelleyerek bu hatayı düzeltilmiş ~ 2.0.36 yılında package.json.

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

Benimki biraz ilgili, ben moggo db değil, mongod kullanıyordum .
Brad B

5

Ne yazık ki, yukarıdaki tüm cevaplar sadece yarısı doğru .. Bunu anlamak için uzun zaman aldı ..

Mongoose bson npm üzerinden kurulum uyarı verir ve hataya neden olur ...

npm install -g node-gyp

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

Bu sihir gibi çalışır !!


Bu hata ile başarısız olur:$ 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

Benim için sadece bu komutları api dizinimde çalıştırmam gerekiyor:

rm -rf node_modules
npm cache clean 
npm install

4

Az önce koştum:

sudo npm install bson

ve

sudo npm update

ve her şey yolunda.


Sudo hakları ile npm çalıştırmaktan çok kaçınmalısınız.
loganhuskins

Sudo alanında olmaktan kaçınabileceğiniz her şeyi yapmalısınız. Bunun korkunç sorunlara neden olacağını sanmıyorum, sadece iyi bir uygulama. İşte size yardımcı olabilecek bir makale (John Papa'yı sevmekten başka kefil olamaz). johnpapa.net/how-to-use-npm-global-without-sudo-on-osx
loganhuskins

3

Bson uzantısı mesajı sadece bir uyarı , benim nodejs uygulamasında her zaman olsun.

Kontrol edilecek şeyler:

  • MongoDB örneği : Çalışan bir MongoDB örneğiniz var mı?
  • Config : Mongoose'u MongoDB örneğinize doğru yapılandırdınız mı? Hata mesajının mongodb sunucusu ana bilgisayar adınız için çok garip bir dize verdiğinden, yapılandırmanızın yanlış olduğundan şüpheleniyorum.

Bu yararlı bir bilgiydi. Bu yolumdan ile ben mongolab kullanıcı hesap bilgilerini veritabanı için gerçek mongodb kullanıcı bilgileri ile karıştırdığını anladım.
Theja

Hmm, aynı sorunla karşılaşıyorum. Her şey yerel test sunucumda çalışıyordu ve mongoHQ kullanıyorum, bu yüzden yerel bir mongo örneğine gerek yok, başka ne yanlış gidiyor olabilir?
Karoh

Bunu unutma,
Pradeep'in

3

Bu sorunu CentOS'ta

  • sudo yum groupinstall "Geliştirme Araçları"
  • sudo npm install -g düğüm-gyp
  • rm -r Instagram Hesabındaki Resim ve Videoları node_modules
  • npm önbellek temizliği
  • npm kurulum

@Theja hatanın sadece Windows makinede gerçekleştiğini söyledi.
Pawel Veselov

3

Aşağıdaki satır 10 değiştirerek düzeltti:

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

dan:

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

için:

bson = require('bson');

3
Bu, paketi saf js çözümü kullanmak için yapıyor, sanırım
bolerovt

% 100 emin değilim, ama tam olarak bundan kaçındığını anladım.
jorgefpastor

2

Bu sorunu da aldım ve oturumlarımın çalışmamasına neden oldu. Ama ikisini de kırmamak için ...

Firavun faresi bağlantısı kullandım.

Bu vardı:

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

Çok basit. Ancak req.session her zaman boş kaldı.

rm -rf node_modules
npm cache clean
npm install

Hile yaptı. Paketinizde 'mongodb' olmadığına dikkat edin. Json! Sadece Mongoose ve connect-mongo.


2

Ubuntu'daki sorunu şu şekilde çözdüm:

  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

@Mbochynski cevabından esinlenerek, önce sembolik bir bağlantı oluşturmak zorunda kaldım, aksi takdirde yeniden oluşturma başarısız oldu.


2

Ben aynı sorun çok seçenek denedim ama son npm intallolarak benim ortalama uygulama klasöründe çalıştı.


2

Git depomda node_modules klasörünü eklediğim için bu sorunu yaşadım . Ben node_modules diğer sistemde yeniden inşa zaman işe yaradı. Biri Linux'u, diğeri OS X'i çalıştırıyordu. Belki de farklı işlemci mimarileri vardı.


1

EC2 örneğimde de aynı sorunu yaşadım. Sanırım ilk neden, Mongo'yu yüklediğimde çalışan bir Node örneğimin olmasıydı. Düğüm hizmetini durdurdum ve sonra koştum

sudo npm update 

düğüm projemin üst düzey klasörünün içinde. Bu sorunu düzeltti ve her şey yeni gibiydi


1

Düğümü sanal makine (vagrant) paylaşılan klasöründe çalıştırmaya çalışıyordum. Bu bir sorundu. Ana bilgisayarım Windows, Windows üzerinde düğüm yüklü ve bir cazibe gibi çalıştı. Sanal makine kullanıyorsanız, ana makine üzerinde düğüm sunucusu çalıştırmayı deneyin.


1

Sadece aynı problemi yaşadım ve gerçekten hiçbir şey benim için işe yaramadı. Hata, kerberossoruna neden oluyordu ve mongoosebağımlılıklardan biriydi . - I Ubuntu üzerinde olduğum için, ben izin sorunları küresel yüklenmiş paketler arasında bir yerde olabileceğini düşündüm /usr/lib/node_modulesaracılığıylasudo ve kullanıcı alanı olanlar olabilir.

mongooseKüresel olarak kurdum - sudoelbette ve her şey beklendiği gibi çalışmaya başladı.

PS kerberosPaket şimdi global olarak da kuruluyor mongoose, ancak kasıtlı olarak yaptım mı hatırlayamıyorum - sorunu çözmeye çalışırken ya da başından beri oradaydı.


1

CentOS 7 ile Docker üzerinde çalışıyorum ve aynı sorunla karşılaştım.

etrafa baktıktan ve birkaç deneme yaptıktan sonra, mongodb ve mongodb-server'ı yükleyerek bu sorunu çözdüm

yum install mongodb mongodb-server

Bunun minimal kap üretmek için en iyi yol olduğunu düşünmüyorum. ancak kapsamı aşağıdaki paketlerle sınırlayabilirim

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

Keşiş paketini kaldırıp yeniden yükleyerek çözmeyi başardım. İlk kurulum görünüşte bozuk bir mongodb / bson bağımlılığına sahipti.


1

Followint @ user1548357 Modül dosyasını değiştirmeye karar verdim. Aşağıdaki geçerli yorumların işaret ettiği sorunları önlemek için, bir postinstall komut dosyasına değişikliklerimi ekledim, böylece ayarlayabilir ve unutabilirim ve modüllerim yüklendiğinde çalışacağından emin olabilirim.

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

ve senaryo:

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

Kolayca sadece bu satırı eklemek deneyin blok yolu hem deneyin ve yakalamak: 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'); 

Hepsi bu!!!


Merhaba, Cevabınız için teşekkürler. Lütfen kişilerin okumalarını kolaylaştırmak için kod örneklerinde biçimlendirme kullanın.
F_SO_K

1

Windows 7'de (x64) bana yardımcı olan tek şey: https://stackoverflow.com/a/29714359/2670121

Düğümü ve python'u x32 sürümleriyle yeniden yükleyin.
Bu hatayla çok zaman geçirdim:

C ++ bson uzantısı yüklenemedi

ve son olarak, modülü node-gypkurduğumda (yerel eklentiler oluşturmak için) ve hatta görsel stüdyo ile Windows SDK'sı kurduğumda - nodejs monte edilmiş modülü tanımıyordubson.node bir modül olarak . Yeniden yükledikten sonra sorun giderildi.

Yine, bu hata ne anlama geliyor?

Aslında, hata bile değil. Firavun faresini hala kullanabilirsiniz. Ancak bu durumda, bsonmodülün yerel olarak hızlı bir şekilde gerçekleştirilmesi yerine js-realization, daha yavaştır.

"Node_modules içindeki derinlik yolunu düzenle ..." gibi birçok ipucu gördüm - ki bu tamamen işe yaramaz, çünkü sorunu çözmez, ancak sadece hata mesajlarını kapattı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.