Gagal memuat ekstensi c ++ bson

185

Total simpul noob di sini. Saya sudah mencoba menyiapkan aplikasi contoh simpul tetapi kesalahan berikut terus muncul setiap kali saya mencoba menjalankan:

aplikasi simpul

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
sumber
3
Kesalahannya adalah failed to connect to, jadi saya pikir bsonpesan itu mungkin tidak berhubungan dan sebenarnya tidak penting. Apakah Anda yakin pengaturan koneksi Mongo Anda sudah benar?
loganfsmyth
1
Cerita lucu saya hanya mendapatkan kesalahan ini pada mesin windows ... havent mencoba menginstal node-gyp tetapi ive mencoba hampir semua hal lain dan masih mendapatkan kesalahan. dan chocoletey tidak akan menginstal build penting
Snymax
Bukankah kode JS BSON hampir secepat C ++ sekarang? Jika demikian, apakah ini benar-benar masalah?
UpTheCreek
Untuk orang-orang di iojs baru yang mengalami masalah ini, saya telah membuka tiket untuk melacak masalah ini: github.com/mongodb/js-bson/issues/136
bitinn
Catatan: Saya menggunakan Keystone.js sebagai kerangka mvc saya. Bagi saya, Anda mengubah "../build/Release/bson" menjadi "../browser_build/bson". Jika Anda naik, Anda melihat folder browser_build.
Pranay Pant

Jawaban:

201

Saya kira Anda tidak memiliki alat make yang tersedia ketika Anda menginstal perpustakaan mongodb Anda. Saya sarankan Anda lakukan

xcode-select --install(di mac) atau sudo apt-get install gcc make build-essential(di ubuntu)

dan lari

rm -rf node_modules
npm cache clean
npm install

ATAU hanya pembaruan npm berdasarkan komentar @obia (setelah menginstal build-essential)

npm update
Pradeep Mahdevu
sumber
2
+1. Yang harus saya lakukan adalah 3 baris terakhir - saya pikir alasan saya tidak dibangun adalah karena itu datang sebagai bagian dari mongoskinmodul.
Matt Browne
2
Wow! Itu sudo apt-get install gcc make build-essentialujung adalah salah satu yang terbaik tips pengembangan Node.js + Ubuntu yang pernah saya lihat. Ini adalah pengubah permainan mutlak jika Anda terbiasa mengembangkan aplikasi web dan hanya mengembangkan dengan Node.js di Ubuntu.
Charney Kaye
3
Apa alasan menginstal gccdan makebersama build-essential? Yang terakhir tergantung pada dua lainnya sehingga mereka akan tetap diinstal ( packages.ubuntu.com/trusty/build-essential ). Melakukannya sudo apt-get install build-essentialsudah cukup.
Sergey
8
Bagaimana dengan di windows ?? Saya mendapatkan sesuatu seperti ini di command prompt windows saya C: \ Users \ me> node C: \ Users \ me \ Desktop \ nodeproject \ datagen.js {[Kesalahan: Tidak dapat menemukan modul '../build/Release/bson' ] kode: 'MODULE_NOT_FOUND'} js-bson: Gagal memuat ekstensi c ++ bson, menggunakan versi JS murni {[Kesalahan: Tidak dapat menemukan modul '../build/Release/bson'] kode: 'MODULE_NOT_FOUND'} js-bson: Gagal memuat ekstensi c ++ bson, menggunakan versi JS murni Terhubung dengan benar ke server
ULLAS K
1
Bagaimana dengan mesin jendela :(
Jamie Hutber
100

Saya baru saja menyelesaikannya.

Ketika Anda menginstal modul luwak dengan npm, ia tidak memiliki modul bson bawaan di foldernya. Dalam file tersebut node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js, ubah baris

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

untuk

bson = require('bson');

dan kemudian instal modul bson menggunakan npm.

pengguna1548357
sumber
36
apakah itu ide yang baik untuk mengubah hal-hal di dalam direktori node_modules? Itu tampaknya rapuh
Douglas Ferguson
6
@DouglasFerguson Tidak juga. Jika Anda mengedit node_module, saya sarankan foro repo dan menginstal modul Anda yang dimodifikasi melalui npm / bower.
Christopher Marshall
4
Jawaban ini berhasil. Pengembang di Mongoose, tolong perbaiki ini!
Steve K
23
Ini adalah retasan, bukan perbaikan.
Ashesh
10
Ini bukan solusi. Dengan hasil yang sama Anda hanya dapat menghapus string yang mencetak kesalahan. Kesalahan ini muncul karena plugin c ++ asli untuk bson tidak ditemukan dan dalam kasus ini realisasi js akan tetap digunakan.
Alendorff
36

Saya telah menyortir masalah untuk mendapatkan "Gagal memuat ekstensi c ++ bson" pada raspbian (debian untuk raspberry) dengan:

npm install -g node-gyp

lalu

npm update
Daniele Urania
sumber
3
Saya memecahkan masalah saya hanya dengan menjalankan npm update, bahkan tanpa menginstal apa pun.
MalcolmOcean
27

Saya tidak dapat menyelesaikan ini

sampai sekarang. Pertama-tama Anda harus memiliki paket sistem yang disebutkan oleh Pradeep Mahdevu. Yaitu:

xcode-select --install (on a mac) 

atau

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

Lalu saya sudah menginstal node-gyp

npm install -g node-gyp 

seperti datadracer katakan tetapi pembaruan npm juga disarankan olehnya berisiko. Ini memperbarui semua modul, yang bisa berbahaya (kadang-kadang API berubah antar versi).

Saya sarankan masuk ke direktori node_modules / mongodb / node_modules / bson dan dari sana gunakan

node-gyp rebuild

Itu memecahkan masalah bagi saya.

mbochynski
sumber
5
Bagaimana dengan windows :(
Jamie Hutber
@JamieHutber Instal VS 2013
Rahil Wazir
Saya melakukan ini pada rilis DietPi pada RP1 512MB. Hanya ingin menyebutkan bahwa saya harus menginstal Python ( apt-get install python) dan kemudian dari dalam node_modules/mongoose/node_modules/mongodb/node_modules/bson/jalankan make. Ini dibuat Release/bson.node.
staticboy
20

Masalah umum adalah bahwa node-gyp membutuhkan Python 2.x dan jika sistem Anda pythonmenunjuk ke 3.x, itu akan gagal dikompilasi bson, tanpa peringatan. Anda dapat memperbaikinya dengan menetapkan pythonkunci global di konfigurasi npm Anda yang menunjuk ke 2.x yang dapat dieksekusi di sistem Anda. Misalnya, di Arch Linux:

npm config -g set python "/usr/bin/python2"
tidak pernah
sumber
19

Pada MENANG 8.1

Sepertinya saya menggunakan versi luwak yang salah dalam package.jsonfile saya .

Saya menghapus garis "mongoose" : "^3.8.15"dari package.json.

CLI:

npm install mongoose --save

Sekarang mengatakan "mongoose": "^4.0.6"dalam package.jsondan kesalahan yang saya punya adalah pergi.

ek
sumber
Terima kasih! Anda menyelamatkan saya dari berjam-jam bashing kepala pada keyboard. Ini adalah solusi terakhir dan satu-satunya yang bekerja di windows. Masalahnya adalah bahwa saya menjalankan versi 3.x luwak yang tampaknya tidak kompatibel dengan instal mongodb terbaru pada pc saya.
ChallengeAccepted
Ini akhirnya membuat saya berjalan di Ubuntu juga.
Jason Kennaly
Ya, berjalan di Mac juga. Terima kasih!
jos
Terima kasih banyak! Mengikuti sesi pelatihan "You've Got Documents! A MongoDB Jump Start" Microsoft dan mengalami kesalahan yang sama, hanya terkait dengan paket mongodb - lakukan langkah-langkah di atas untuk yang itu dan cukup yakin, sekarang sudah berjalan! :)
Fernando Madruga
11

Saya menjalankan Ubuntu 14.04 dan untuk memperbaikinya untuk saya, saya harus membuat symlink untuk node untuk menunjuk ke nodejs seperti yang dijelaskan di sini:

nodejs vs node di ubuntu 12.04

Setelah saya melakukannya saya menjalankan kembali perintah-perintah ini:

rm -rf node_modules
npm cache clean
npm install
Anthony
sumber
Anthony yang luar biasa! Saya juga menjalankan di Ubuntu 14.04 dan saran Anda memecahkan masalah bagi saya. Tidak cukup menginstal build-essential dan menginstal ulang semuanya: Saya juga harus menambahkan 'simpul' ln.
Franco
8

Jadi dalam kasus saya, saya pertama kali mencoba memeriksa di bawah direktori ini / node_modules / mongoose / node_modules / , hanya untuk mengkonfirmasi bahwa saya memiliki modul bson . Saya tahu saya tidak memilikinya, lalu saya lari saja

npm instal bson 

lalu

pembaruan npm

Semua diurutkan. Sudah dicoba dan diuji di Ubuntu.

Steven
sumber
bekerja untuk saya juga, tapi saya juga diketik makedi/devel/node_modules/bson/
exebook
1
Bekerja untukku. Membersihkan cache npm tidak. Sebenarnya, semua yang saya lakukan adalah dari / node_modules / luoose rannpm install bson
RichieRich
8

hanya ingin mengatakan saya juga memiliki kesalahan

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

Tetapi dengan tidak ada kesalahan lainnya. Saya mencoba semuanya dan ternyata driver mongodb yang saya tentukan di file package.json tidak kompatibel dengan versi MongoDB saya. Saya mengubahnya ke versi terbaru saya (1.4.34) dan berhasil !!!

acar
sumber
memang npm menginstal mongodb @ terbaru diselesaikan untuk saya masalah
tam.teixeira
8

sudo npm rebuild itulah yang diperbaiki bagi saya.

Zach Dahl
sumber
8

Saya akhirnya memperbaiki kesalahan ini dengan memperbarui versi ketergantungan mongodb saya ke ~ 2.0.36 di package.json.

 "dependencies": {
    "consolidate": "~0.9.1",
    "express": "3.x",
    "mongodb": "~2.0.36",
    "mongoose": "^4.1.12"
  }
Feezy23
sumber
Milik saya sedikit terkait, saya menggunakan mongod, dan bukan mobgo db .
Brad B
5

Sayangnya, Semua jawaban di atas hanya setengah benar .. Butuh waktu lama untuk mencari tahu ini ..

Bo luoose instal via npm melempar peringatan dan menyebabkan kesalahan ...

npm install -g node-gyp

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

Ini bekerja seperti sihir !!

Rama Prashanth
sumber
Ini gagal karena kesalahan:$ 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

Bagi saya hanya perlu menjalankan perintah ini di direktori api saya:

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

Saya hanya berlari:

sudo npm install bson

dan

sudo npm update

dan semua menjadi baik-baik saja.

V. Kovpak
sumber
Anda harus sangat menghindari menjalankan npm dengan hak sudo.
loganhuskins
Apa pun yang dapat Anda hindari di ruang sudo, Anda harus melakukannya. Saya tidak berpikir itu akan menyebabkan masalah yang mengerikan, itu hanya praktik yang baik. Inilah artikel yang dapat membantu (tidak dapat menjaminnya selain menyukai John Papa). johnpapa.net/how-to-use-npm-global-without-sudo-on-osx
loganhuskins
3

Pesan ekstensi bson hanyalah peringatan , saya mendapatkannya setiap saat di aplikasi nodejs saya.

Hal-hal yang perlu diperiksa:

  • Contoh MongoDB : Apakah Anda menjalankan instance MongoDB?
  • Konfigurasi : Apakah Anda mengkonfigurasi Mongoose dengan benar ke instance MongoDB Anda? Saya menduga konfigurasi Anda salah, karena pesan galatnya mengeluarkan string yang sangat aneh untuk nama host server mongodb Anda ..
hendrikswan
sumber
Itu informasi yang berguna. Dengan keluar dari cara saya, saya tahu bahwa saya sedang mencampur info akun pengguna mongolab dengan info pengguna mongodb yang sebenarnya untuk database.
Theja
Hmm, saya mengalami masalah yang sama. Semuanya bekerja pada server uji lokal saya dan saya menggunakan mongoHQ jadi tidak perlu untuk contoh mongo lokal, apa lagi yang bisa salah?
Karoh
lupakan itu, jawaban Pradeep di bawah menyelesaikannya :)
Karoh
3

Saya memperbaiki masalah ini pada CentOS oleh

  • sudo yum groupinstall "Alat Pengembangan"
  • sudo npm instal -g node-gyp
  • rm -r node_modules
  • cache npm bersih
  • npm instal
liudong
sumber
@Theja mengatakan kesalahan hanya terjadi pada mesin Windows.
Pawel Veselov
3

Saya memperbaikinya dengan mengubah baris 10 dari:

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

dari:

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

untuk:

bson = require('bson');
jorgefpastor
sumber
3
Itu membuat paket untuk menggunakan solusi js murni, saya kira
bolerovt
Saya tidak 100% yakin, tapi saya mengerti itu menghindari hal itu.
jorgefpastor
2

Saya juga mendapat masalah ini dan itu menyebabkan sesi saya tidak berfungsi. Tapi jangan sampai putus ...

Saya menggunakan koneksi luwak.

Saya punya ini:

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

Sangat mudah. Tapi req.session tetap kosong.

rm -rf node_modules
npm cache clean
npm install

Lakukan triknya. Awas, Anda tidak memiliki 'mongodb' di paket Anda. Johnny! Hanya luwak dan hubungkan-mongo.

KLoozen
sumber
2

Inilah cara saya memperbaiki masalah di 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

Terinspirasi oleh jawaban @mbochynski, tetapi saya harus membuat tautan simbolis terlebih dahulu, jika tidak, pembangunan kembali gagal.

collimarco
sumber
2

saya mengalami masalah yang sama mencoba begitu banyak pilihan tetapi yang terakhir npm intalldi folder aplikasi rata-rata saya berhasil.

ashishkumar148
sumber
2

Saya punya masalah ini karena saya menyertakan folder node_modules di repositori Git saya. Ketika saya membangun kembali node_modules di sistem lain itu berhasil. Salah satunya menjalankan Linux, OS X lainnya. Mungkin mereka memiliki arsitektur prosesor yang berbeda juga.

marcmtlca
sumber
1

Saya memiliki masalah yang sama pada contoh EC2 saya. Saya pikir penyebab awalnya adalah karena saya memiliki instance Node berjalan ketika saya menginstal Mongo. Saya menghentikan layanan Node dan kemudian berlari

sudo npm update 

di dalam folder tingkat atas proyek simpul saya. Ini memperbaiki masalah dan semuanya seperti baru

Lloyd Banks
sumber
1

Saya mencoba untuk menjalankan node pada folder mesin virtual (gelran) bersama. Itu masalah. Mesin host saya adalah Windows, menginstal node pada Windows dan bekerja seperti pesona. Jadi jika Anda menggunakan mesin virtual, coba jalankan server simpul pada mesin host.

Lukas Liesis
sumber
1

Saya hanya memiliki masalah yang sama dan benar-benar tidak ada yang berhasil untuk saya. Kesalahan yang ditampilkan kerberosmenyebabkan masalah dan itu adalah salah satu mongoosedependensi. Karena saya menggunakan Ubuntu, saya pikir mungkin ada masalah izin di suatu tempat antara paket yang diinstal secara global - /usr/lib/node_modulesvia sudo, dan yang ada di ruang pengguna.

Saya menginstal mongoosesecara global - sudotentu saja, dan semuanya mulai berfungsi seperti yang diharapkan.

PS kerberosPaket ini sekarang juga diinstal secara global di sebelahnya mongoose, namun saya tidak ingat apakah saya sengaja melakukannya - ketika saya sedang mencoba menyelesaikan masalah, atau jika sudah ada sejak awal.

Mahdi
sumber
1

Saya sedang mengerjakan Docker dengan centOS 7, dan mengalami masalah yang sama.

setelah melihat sekeliling, dan mencoba beberapa kali, saya memperbaiki masalah ini dengan menginstal mongodb, dan mongodb-server

yum install mongodb mongodb-server

Saya tidak berpikir ini adalah cara terbaik untuk menghasilkan wadah minimal. tapi saya bisa membatasi ruang lingkup ke dalam paket-paket berikut

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

Saya dapat mengatasinya dengan menghapus dan menginstal ulang paket biksu. Instalasi awal tampaknya memiliki ketergantungan mongodb / bson yang rusak.

Johnkop
sumber
1

Followint @ user1548357 Saya memutuskan untuk mengubah file modul itu sendiri. Sehingga untuk menghindari masalah yang ditunjukkan oleh komentar yang valid di bawah ini saya memasukkan perubahan saya dalam skrip postinstall sehingga saya dapat mengatur dan melupakannya dan yakin bahwa itu akan berjalan ketika modul saya diinstal.

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

dan skripnya adalah:

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

dengan mudah menendang masalah dengan hanya menambahkan baris ini baik mencoba dan menangkap jalur blok: 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'); 

Itu semuanya!!!

mallikarjuna gv
sumber
Hai, terima kasih atas jawaban Anda. Silakan gunakan format pada contoh kode untuk membuatnya lebih mudah bagi orang untuk membaca.
F_SO_K
1

Satu-satunya hal yang membantu saya di Windows 7 (x64): https://stackoverflow.com/a/29714359/2670121

Instal ulang node dan python dengan versi x32.
Saya menghabiskan banyak waktu dengan kesalahan ini:

Gagal memuat ekstensi c ++ bson

dan akhirnya, ketika saya menginstal modul node-gyp(untuk membangun addons asli) dan bahkan menginstal windows SDK dengan visual studio - nodejs tidak mengenali modul yang dirakit bson.nodesebagai modul. Setelah menginstal ulang masalah hilang.

Lagi, Apa artinya kesalahan ini?

Sebenarnya, itu bahkan bukan kesalahan. Anda masih bisa menggunakan luwak. Tetapi dalam hal ini, alih-alih realisasi asli bsonmodul yang cepat, Anda dapatkan js-realization, yang lebih lambat.

Saya melihat banyak tips seperti: "edit path jauh di dalam node_modules ..." - yang sama sekali tidak berguna, karena tidak menyelesaikan masalah, tetapi hanya mematikan pesan kesalahan.

Alendorff
sumber