Не вдалося завантажити розширення c ++ bson


185

Тут загальний вузол noob. Я намагався налаштувати зразок додатка для вузла, але наступна помилка постійно з’являється при кожному спробі запуску:

вузол додаток

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
Помилка є failed to connect to, тому я думаю, що bsonповідомлення може бути не пов'язаним і насправді не має значення. Ви впевнені, що налаштування підключення Mongo правильні?
loganfsmyth

1
Смішна історія Я отримую цю помилку лише на машині Windows ... не намагався встановити node-gyp, але Ive спробував майже все інше і все ще отримував помилку. і chocoletey не зможуть встановити необхідні
речі

Хіба код JS BSON майже не такий швидкий, як C ++ зараз? Якщо так, чи справді це проблема?
UpTheCreek

Для людей з новішими iojs, які відчувають цю проблему, я відкрив квиток для відстеження цієї проблеми: github.com/mongodb/js-bson/isissue/136
bitinn

Примітка. Я використовую Keystone.js як мій каркас mvc. Для мене ви змінюєте "../build/Release/bson" на "../browser_build/bson". Якщо піднятися вгору, ви побачите папку browser_build.
Штани Прана

Відповіді:


201

Напевно, у вас не було інструментів зробити доступними під час встановлення бібліотеки mongodb. Я пропоную вам зробити

xcode-select --install(на mac) або sudo apt-get install gcc make build-essential(на ubuntu)

і біжи

rm -rf node_modules
npm cache clean
npm install

АБО просто оновлення npm на основі коментаря @tobias (після встановлення build-basic)

npm update

2
+1. Все, що мені потрібно було зробити, - це останні три рядки - я думаю, що причина моєї не була побудована в тому, що вона входила як частина mongoskinмодуля.
Метт Браун

2
Оце Так! Ця sudo apt-get install gcc make build-essentialпорада - одна з найкращих порад щодо розробки Node.js + Ubuntu, яку я коли-небудь бачив. Це абсолютна зміна ігор, якщо ви звикли розробляти веб-додатки та просто розроблятись з Node.js на Ubuntu.
Charney Kaye

3
У чому причина встановлення gccта makeразом із build-essential? Останнє залежить від двох інших, тому вони все одно будуть встановлені ( пакети.ubuntu.com/ trusty/build- essential ). Робити sudo apt-get install build-essentialмає бути достатньо.
Сергій

8
Як щодо Windows ?? Я отримую щось подібне в моєму командному рядку Windows C: \ Users \ me> вузол C: \ Користувачі \ мене \ Настільний \ nodeproject \ datagen.js {[Помилка: Неможливо знайти модуль '../build/Release/bson' ] код: 'MODULE_NOT_FOUND'} js-bson: не вдалося завантажити розширення c ++ bson, використовуючи чисту версію JS {[Помилка: Неможливо знайти модуль '../build/Release/bson'] код: 'MODULE_NOT_FOUND'} js-bson: Не вдалося завантажити розширення c ++ bson, використовуючи чисту версію JS Підключено правильно до сервера
ULLAS K

1
Як щодо віконних машин :(
Джеймі Хатбер

100

Я просто вирішив це.

При встановленні модуля mongoose в npm він не має вбудованого модуля bson у своїй папці. У файлі node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.jsзмініть рядок

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

до

bson = require('bson');

а потім встановіть модуль bson за допомогою npm.


36
чи гарна ідея змінити речі всередині каталогу node_modules? Це здається крихким
Дуглас Фергюсон

6
@DouglasFerguson Не дуже. Якщо ви редагуєте модуль node_, я б запропонував розблокувати репо і встановити модифікований модуль через npm / bower.
Крістофер Маршалл

4
Ця відповідь спрацювала. Devs у Mongoose, виправте це!
Стів К

23
Це злом, а не виправлення.
Еш

10
Це не рішення. З тим же результатом ви можете просто видалити рядки, які друкують помилку. Ця помилка з'являється через те, що вбудований плагін c ++ для bson не знайдено, і в цьому випадку реалізація js все одно буде використана.
Алендорф

36

Я сортував питання про отримання "Не вдалося завантажити розширення c ++ bson" на raspbian (debian для малину) за:

npm install -g node-gyp

і потім

npm update

3
Я вирішив свою проблему просто запуском npm update, навіть не встановлюючи нічого іншого.
MalcolmOcean

27

Я не зміг цього вирішити

до цих пір. Перш за все, ви повинні мати системні пакети, згадані Pradeep Mahdevu. Ті:

xcode-select --install (on a mac) 

або

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

Тоді я встановив node-gyp

npm install -g node-gyp 

як сказав datadracer, але оновлення, що пропонується ним, також є ризикованим. Він оновлює всі модулі, що може бути небезпечно (іноді API змінюється між версіями).

Я пропоную зайти в каталог node_modules / mongodb / node_modules / bson і звідти використовувати

node-gyp rebuild

Це вирішило для мене проблему.


5
Що з Windows :(
Джеймі Хатбер

@JamieHutber Install VS 2013
Рахіль Вазір

Я робив це під час випуску DietPi на 512 Мб RP1. Просто хотів сказати, що мені потрібно встановити Python ( apt-get install python), а потім зсередини node_modules/mongoose/node_modules/mongodb/node_modules/bson/run make. Це створило Release/bson.node.
staticboy

20

Поширена проблема полягає в тому, що node-gyp вимагає Python 2.x, і якщо ваша система pythonвказує на 3.x, вона не зможе скомпілюватись bsonбез попередження. Ви можете це виправити, встановивши pythonглобальний ключ у вашій npm-конфігурації, який вказує на 2.x виконуваний файл у вашій системі. Наприклад, в Arch Linux:

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

19

ВИМОГ 8.1

Здається, я використав неправильну версію мангуста у своєму package.json файлі.

Я видалив рядок "mongoose" : "^3.8.15"із package.json.

CLI:

npm install mongoose --save

Тепер він говорить "mongoose": "^4.0.6"в package.jsonі помилка, яку я мав, вже не було.


Дякую! Ти врятував мене від незліченних годин удару голови по клавіатурі. Це було останнє і єдине рішення, яке працювало на windows. Проблема полягала в тому, що я працював на версії 3.x мангуста, яка виявилася несумісною з останньою установкою mongodb на моєму ПК.
ChallengeAccepted

Це, нарешті, і мене запустило на Ubuntu.
Джейсон Кенналі

Так, працює і на Mac. Дякую!
Jos

Дякую купу! Після тренінгу Microsoft "Ви отримали документи! Перехід" MongoDB Jump Start "і була така ж помилка, що стосувалася лише пакету mongodb - зробили вищезазначені кроки для цього і, напевно, зараз він працює! :)
Фернандо Мадруга

11

Я запускаю Ubuntu 14.04, і щоб виправити це для мене, довелося створити симпосилання для вузла, щоб вказати на nodejs, як описано тут:

nodejs vs node на ubuntu 12.04

Як тільки я це зробив, я перезапустив ці команди:

rm -rf node_modules
npm cache clean
npm install

Великий Антоній! Я також працюю на Ubuntu 14.04, і ваша пропозиція вирішила проблему для мене. Недостатньо встановити build-basic та перевстановити все: мені також довелося додати ln 'node'.
Франко

8

Тому в моєму випадку я спершу спробував перевірити цей каталог / node_modules / mongoose / node_modules / , щоб лише підтвердити наявність у мене bson модуля . Я зрозумів, що в першу чергу цього у мене немає, то просто бігаю

npm встановити bson 

і потім

npm оновлення

Всі сортували. Спробували і протестували в Ubuntu.


працював для мене , як добре, але я також надрукував makeв/devel/node_modules/bson/
exebook

1
Працювали для мене. Чищення кеш-пам'яті npm не відбулося. Насправді все, що я робив, було з / node_modules / мангуста, що пробігnpm install bson
RichieRich

8

просто хотів сказати, що у мене також була помилка

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

Але при жодних інших помилках. Я все випробував і виявляється, що драйвери mongodb, які я вказував у файлі package.json, несумісні з моєю версією MongoDB. Я змінив його на останню версію, яка була (1.4.34), і вона працювала !!!


дійсно npm встановити mongodb @ останнє вирішило для мене проблему
tam.teixeira


8

Я остаточно виправив цю помилку, оновивши свою версію залежності mongodb до ~ 2.0.36 дюйма package.json.

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

Моя була трохи пов'язана, я використовував mongod, а не mobgo db .
Бред Б

5

На жаль, всі вищезазначені відповіді лише наполовину вірні .. Знадобилося довго розібратися в цьому ..

Установка мангуста bson через npm кидає попередження і викликає помилку ...

npm install -g node-gyp

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

Це працює як магія !!


Це не вдається помилково:$ 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
Томас Моденей

4

Для мене потрібно лише запустити ці команди в моєму каталозі api:

rm -rf node_modules
npm cache clean 
npm install

4

Я щойно бігав:

sudo npm install bson

і

sudo npm update

і все стане нормально.


Вам слід дуже уникати запуску npm з правами sudo.
loganhuskins

Все, що ви можете уникнути, якщо у вас є місце в судо, вам слід. Я не думаю, що це спричинить серйозні проблеми, це просто хороша практика. Ось стаття, яка може допомогти (не можу поручитися за неї, крім того, як сподобатися Джону Папу). johnpapa.net/how-to-use-npm-global-without-sudo-on-osx
loganhuskins

3

Повідомлення про розширення bson - це лише попередження , я отримую це постійно у своїй програмі nodejs.

Що потрібно перевірити:

  • Примірник MongoDB : У вас працює екземпляр MongoDB?
  • Налаштування : Ви правильно налаштували Mongoose на свій примірник MongoDB? Я підозрюю, що ваш конфігурація помиляється, оскільки повідомлення про помилку виплетає дуже дивну рядок для імені хоста вашого сервера mongodb ..

Це була корисна інформація. Зважаючи на це, я зрозумів, що я змішував інформацію облікового запису користувача mongolab з фактичною інформацією користувача mongodb для бази даних.
Теджа

Хм, я стикаюся з тим же питанням. Хоча все працювало на моєму локальному тестовому сервері, і я використовую mongoHQ, тому немає потреби в локальному екземплярі mongo, що ще може піти не так?
Карох

забудьте про це, відповідь
Прадіпа

3

Я вирішив цю проблему на CentOS на

  • sudo yum groupinstall "Інструменти розробки"
  • sudo npm install -g node-gyp
  • rm -r node_модулі
  • npm кеш чистий
  • npm встановити

@Theja сказала, що помилка трапляється лише на машині Windows.
Павло Веселов

3

Я виправив це, змінивши рядок 10:

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

від:

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

до:

bson = require('bson');

3
Це робить пакет для використання чистого js рішення, я думаю
bolerovt

Я не впевнений на 100%, але я зрозумів, що уникаю саме цього.
jorgefpastor

2

У мене також з’явилася ця проблема, і це призвело до того, що мої сеанси не працювали. Але не зламати й ...

Я використовував мангустне з'єднання.

У мене було таке:

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

Дуже прямо. Але req.session залишався завжди порожнім.

rm -rf node_modules
npm cache clean
npm install

Зробив трюк. Слідкуйте за тим, щоб у вас у пакеті не було "mongodb"! Просто мангуст і підключення-монго.


2

Ось як я вирішив проблему в 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

Натхненний відповіддю @mbochynski, але мені довелося створити символічне посилання спочатку, інакше відновлення не вдалося.


2

У мене були ті ж проблеми, спробував так багато варіантів, але в останньому npm intallв моїй середній папці додатків працював.


2

У мене була ця проблема, оскільки я включав папку node_modules в моє сховище Git. Коли я відновив node_modules в іншій системі, він працював. Один з них працював під управлінням Linux, інший OS X. Можливо, у них також були різні архітектури процесорів.


1

У мене була така ж проблема в моєму екземплярі EC2. Я думаю, що початкова причина полягала в тому, що у мене був запущений екземпляр Node, коли я встановив Mongo. Я зупинив службу Node, а потім побіг

sudo npm update 

всередині папки верхнього рівня мого проекту вузла. Це вирішило проблему, і все було просто як нове


1

Я намагався запустити вузол у загальну папку віртуальної машини (бродячого). Це була проблема. Моя хост-машина - це Windows, встановлений вузол у Windows і працював як шарм. Отже, якщо ви використовуєте віртуальну машину, просто спробуйте запустити сервер вузлів на хост-машині.


1

У мене просто була така ж проблема і буквально нічого для мене не працювало. Показана помилка kerberosвикликає проблему, і це була одна із mongooseзалежностей. Оскільки я перебуваю на Ubuntu, я подумав, що можуть виникнути проблеми з дозволом десь між глобально встановленими пакетами - /usr/lib/node_modulesчерез via sudoта тими, які знаходяться в просторі користувача.

Я встановив mongooseглобально - sudoзвичайно, і все почало працювати, як очікувалося.

PS kerberosПакет тепер також встановлений у всьому світі поруч mongoose, однак я не можу пригадати, чи робив це навмисно - поки я намагався вирішити проблему, чи це було там з самого початку.


1

Я працюю над Docker з centOS 7 і зіткнувся з тією ж проблемою.

озирнувшись та зробивши кілька спроб, я вирішив цю проблему, встановивши mongodb та mongodb-сервер

yum install mongodb mongodb-server

Я не думаю, що це найкращий спосіб виготовити мінімальний контейнер. але я можу обмежити область застосування в наступних пакетах

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

Мені вдалося вирішити, видаливши та перевстановивши пакет monk. Початкова установка, здавалося б, мала корумповану залежність mongodb / bson.


1

Followint @ user1548357 Я вирішив змінити сам файл модуля. Щоб уникнути проблем, на які вказали дійсні коментарі нижче, я включив свої зміни до сценарію після встановлення, щоб я міг його встановити і забути, і буду впевнений, що він запуститься, коли мої модулі будуть встановлені.

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

а сценарій:

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

легко вирішити проблему, просто додавши цей рядок як спробуйте, так і спіймати блок шляху: 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'); 

Це все!!!


Привіт, дякую за вашу відповідь. Будь ласка, використовуйте форматування на прикладах коду, щоб полегшити їх читання людям.
F_SO_K

1

Єдине, що мені допомагає у Windows 7 (x64): https://stackoverflow.com/a/29714359/2670121

Перевстановіть вузол та пітон з версіями x32.
Я багато часу провів з цією помилкою:

Не вдалося завантажити розширення c ++ bson

і нарешті, коли я встановив модуль node-gyp(для створення нативних аддонів) і навіть встановив Windows SDK з візуальною студією - nodejs не визнав зібраний модуль bson.nodeяк модуль. Після перевстановлення проблема відпадає.

Знову ж таки, що означає ця помилка?

Власне, це навіть не помилка. Ви все одно можете використовувати мангуст. Але в цьому випадку замість швидкої натурної реалізації bsonмодуля ви отримали js-realization, що повільніше.

Я бачив багато порад, таких як: "редагувати шлях углиб node_modules ..." - що абсолютно марно, оскільки це не вирішує проблему, а просто вимкнуло повідомлення про помилки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.