Не удалось загрузить расширение C++ bson

Общий нуб здесь. Я пытался настроить пример приложения узла, но следующая ошибка продолжает появляться каждый раз, когда я пытаюсь запустить:

приложение узла

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)

35 ответов

Я предполагаю, что у вас не было инструментов make, доступных при установке библиотеки mongodb. Я предлагаю вам сделать

xcode-select --install (на маке) или sudo apt-get install gcc make build-essential (в убунту)

и беги

rm -rf node_modules
npm cache clean
npm install

ИЛИ просто обновление npm на основе комментария @tobias (после установки build-essential)

npm update

Я только что решил это.

Когда вы устанавливаете модуль 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.

Я решил проблему получения "Не удалось загрузить расширение b ++ C++" на raspbian(debian для raspberry) следующим образом:

npm install -g node-gyp

а потом

npm update

Я не смог решить это

до сих пор. Прежде всего, вы должны иметь системные пакеты, упомянутые Pradeep Mahdevu. Это:

xcode-select --install (on a mac) 

или же

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

Тогда я установил узел-гип

npm install -g node-gyp 

как сказал datadracer, но предложенное им обновление npm рискованно. Обновляются все модули, которые могут быть опасны (иногда API меняется между версиями).

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

node-gyp rebuild

Это решило проблему для меня.

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

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

На WIN 8.1

Кажется, я использовал неправильную версию mongoose в своем файле package.json.

Я удалил строку "mongoose": "^3.8.15" из package.json

CLI: npm установить mongoose --save

Теперь он говорит "mongoose": "^4.0.6" в package.json, и ошибка, с которой я столкнулся, исчезла.

Я использую Ubuntu 14.04, и чтобы исправить это, мне нужно было создать символическую ссылку для узла, чтобы он указывал на nodejs, как описано здесь:

nodejs против узла в Ubuntu 12.04

Как только я сделал это, я перезапустил эти команды:

rm -rf node_modules
npm cache clean
npm install

Поэтому в моем случае я сначала попытался проверить в этом каталоге / node_modules / mongoose / node_modules /, просто чтобы убедиться, что у меня есть модуль bson. Я понял, что у меня его не было в первую очередь, потом я просто бегу

NPM установить BSON 

а потом

обновление npm

Все отсортировано. Испытано и протестировано в Ubuntu.

Я, наконец, исправил эту ошибку, обновив мою версию зависимости mongodb до "~2.0.36" в package.json.

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

sudo npm rebuild было то, что исправило это для меня.

Просто хотел сказать, у меня тоже была ошибка

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

Но ни с одной из других ошибок. Я перепробовал все и оказалось, что драйверы mongodb, которые я указывал в файле package.json, были несовместимы с моей версией MongoDB. Я изменил его на мою последнюю версию (1.4.34), и это сработало!!!

К сожалению, все приведенные выше ответы являются только наполовину правильными.. Потребовалось много времени, чтобы понять это..

Установка Mongoose bson через npm выдает предупреждение и вызывает ошибку...

npm install -g node-gyp

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

Это работает как магия!

Я только что побежал:

sudo npm install bson

а также

sudo npm update

and all become ok.

Для меня достаточно выполнить эти команды в моем каталоге API:

rm -rf node_modules
npm cache clean 
npm install

Сообщение о расширении bson - это просто предупреждение, я все время получаю его в своем приложении nodejs.

Вещи, чтобы проверить:

  • Экземпляр MongoDB: у вас работает экземпляр MongoDB?
  • Config: Правильно ли вы настроили Mongoose для своего экземпляра MongoDB? Я подозреваю, что ваша конфигурация неверна, потому что сообщение об ошибке выдает очень странную строку для имени вашего сервера mongodb.

Я исправил это, изменив строку 10 из /node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js из:

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

чтобы:

bson = require('bson');

Я исправил эту проблему на CentOS

  • sudo yum groupinstall "Инструменты разработки"
  • sudo npm install -g node-gyp
  • rm -r node_modules
  • очистка кеша npm
  • установка npm

У меня были такие же проблемы, перепробовал так много вариантов, но в последнем npm intall у меня в виду папка приложения работала.

Вот как я исправил проблему в 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, но сначала мне нужно было создать символическую ссылку, иначе перестроить не удалось.

У меня была эта проблема, потому что я включил папку node_modules в мой репозиторий Git. Когда я перестроил node_modules в другой системе, это сработало. Один из них работал под управлением Linux, другой - OS X. Возможно, у них были и другие процессорные архитектуры.

Я также получил эту проблему, и это заставило мои сеансы не работать. Но не сломать тоже...

Я использовал мангуста.

У меня было это:

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

Очень просто. Но требование оставалось всегда пустым.

rm -rf node_modules
npm cache clean
npm install

Сделал трюк. Следите за тем, чтобы в вашем package.json не было mongodb! Просто мангуст и коннект-монго.

Followint @user1548357 Я решил изменить сам файл модуля. Чтобы избежать проблем, указанных в действительных комментариях ниже, я включил свои изменения в скрипт postinstall, чтобы я мог установить его, забыть и быть уверенным, что он будет работать после установки моих модулей.

// 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');
  });
});

Я работаю на Docker с CentOS 7, и столкнулся с той же проблемой.

осмотревшись и сделав несколько попыток, я исправил эту проблему, установив mongodb и mongodb-server

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

Единственное, что мне помогает в Windows 7 (x64): /questions/31104909/oshibka-ustanovki-npm-nesmotrya-na-izmenenie-fajla-bson/31104922#31104922

Переустановите узел и python с версиями x32.
Я провел много времени с этой ошибкой (не удалось загрузить расширение b ++ C++) и, наконец, когда я установил модуль node-gyp (для сборки собственных дополнений) и даже установленный Windows SDK с visual studio - nodejs не распознал собранный модуль bson.node как модуль. После переустановки проблема исчезла.

Опять же, что означает эта ошибка?

На самом деле, это даже не ошибка. Вы все еще можете использовать мангуст. Но в этом случае вместо быстрой нативной реализации модуля bson вы получаете js-реализацию, которая медленнее. Я видел много советов, таких как: "редактировать путь глубоко внутри node_modules..." - что совершенно бесполезно, потому что это не решает проблему, а просто отключает сообщения об ошибках.

В нашем случае причина, по которой версия bson для C++ не была найдена, заключалась в том, что мы работали за корпоративным прокси-сервером, и что-то в процессе сборки BSON должно быть доступно для извлечения файлов. Когда мы посмотрели в node_modules/bson/builderror.log, мы увидели такую ​​ошибку:

gyp WARN install got an error, rolling back install gyp ERR! configure error gyp ERR! stack Error: connect ECONNREFUSED gyp ERR! stack at errnoException (net.js:904:11) gyp ERR! stack at Object.afterConnect [as oncomplete] (net.js:895:19)

Который предположил, что прокси может быть проблемой. Установка переменных среды http_proxy и https_proxy решила эту проблему.

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

sudo npm update 

внутри папки верхнего уровня моего проекта узла. Это решило проблему, и все было как новый

Для моего случая я npm install все модули на моей локальной машине (Mac), и я не включил node_modules в.gitignore и загрузил на github. Затем я клонировал проект в мои aws, как вы знаете, он работает под управлением Linux, поэтому я получил ошибки. Я просто включил node_modules в.gitignore и использовал npm install в моем случае AWS, то это работает.

Легко избавиться от проблемы, просто добавив эту строку и попробуйте и поймать путь к блоку: 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'); 

Это все!!!

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

В Ubuntu 14.04 мне нужно было создать ссылку в / usr / bin, потому что /usr/bin/env искал / usr / bin / node

ln -s / usr / bin / nodejs / usr / bin / node

Сообщения об ошибках можно найти в файле builderror.log в каждом каталоге, поэтому для сообщения:

bson@0.2.21 install / usr / local / lib / node_modules / mongodb / node_modules / mongodb-core / node_modules / bson (пересборка узла 2> buildderror.log) || (выход 0)

посмотрите на этот файл для получения дополнительной информации о точной проблеме

/usr/local/lib/node_modules/mongodb/node_modules/mongodb-core/node_modules/bson/builderror.log

Другие вопросы по тегам