Не удалось загрузить расширение С++ bson
Всего node noob здесь. Я пытаюсь создать образец приложения node, но при каждом попытке запуска появляется следующая ошибка:
node приложение
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)
Ответы
Ответ 1
Я думаю, у вас не было инструментов make, доступных при установке вашей библиотеки mongodb. Я предлагаю вам сделать
xcode-select --install
(на маке)
или sudo apt-get install gcc make build-essential
(на ubuntu)
и запустите
rm -rf node_modules
npm cache clean
npm install
ИЛИ просто обновление npm на основе комментария @tobias (после установки build-essential)
npm update
Ответ 2
Я просто решил, что.
Когда вы устанавливаете модуль 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.
Ответ 3
Я отсортировал вопрос о том, как получить "Не удалось загрузить расширение С++ bson" на raspbian (debian for maspberry):
npm install -g node-gyp
а затем
npm update
Ответ 4
Мне не удалось решить эту проблему
до сих пор. Прежде всего, вы должны иметь системные пакеты, упомянутые Прадипом Маддеву. Это:
xcode-select --install (on a mac)
или
sudo apt-get install gcc make build-essential (on ubuntu)
Затем я установил node -gyp
npm install -g node-gyp
как и datadracer, но обновление npm, также предложенное им, является рискованным. Он обновляет все модули, что может быть опасно (иногда API меняется между версиями).
Я предлагаю перейти в каталог node_modules/mongodb/node_modules/bson и оттуда использовать
node-gyp rebuild
Это решило проблему для меня.
Ответ 5
Общей проблемой является то, что node -gyp требует Python 2.x, и если ваша система python
указывает на 3.x, она не сможет скомпилировать bson
без предупреждения. Вы можете исправить это, установив глобальный ключ python
в конфигурацию npm, указывающий на исполняемый файл 2.x в вашей системе. Например, в Arch Linux:
npm config -g set python "/usr/bin/python2"
Ответ 6
На WIN 8.1
Кажется, я использовал неправильную версию mongoose в своем файле package.json
.
Я удалил строку "mongoose" : "^3.8.15"
из package.json
.
CLI:
npm install mongoose --save
Теперь в package.json
написано "mongoose": "^4.0.6"
, и ошибка, с которой я столкнулся, исчезла.
Ответ 7
Я запускаю Ubuntu 14.04 и исправляю его для меня. Мне нужно было создать символическую ссылку для node, чтобы указать на nodejs, как описано здесь:
nodejs vs node на ubuntu 12.04
Как только я это сделал, я перезапустил следующие команды:
rm -rf node_modules
npm cache clean
npm install
Ответ 8
просто хотел сказать, что у меня также была ошибка
Failed to load c++ bson extension, using pure JS version
Но ни одна из других ошибок. Я пробовал все, и, как оказалось, драйверы mongodb, которые я указывал в файле package.json, были несовместимы с моей версией MongoDB. Я изменил его на мою последнюю версию, которая была (1.4.34), и это сработало!!!
Ответ 9
Итак, в моем случае я сначала попытался проверить этот каталог /node_modules/mongoose/node_modules/, просто чтобы подтвердить, что у меня есть bson модуль.
Я понял, что у меня его нет, во-первых, я просто запустил
npm install bson
а затем
npm update
Все отсортированы. Протестировано и протестировано в Ubuntu.
Ответ 10
sudo npm rebuild
было для меня исправлено.
Ответ 11
Наконец, я исправил эту ошибку, обновив версию зависимости mongodb до ~ 2.0.36 в package.json
.
"dependencies": {
"consolidate": "~0.9.1",
"express": "3.x",
"mongodb": "~2.0.36",
"mongoose": "^4.1.12"
}
Ответ 12
К сожалению, все приведенные выше ответы только наполовину правы.
Долгое время это выяснялось.
Mongoose bson устанавливает через предупреждение npm throws и вызывает ошибку...
npm install -g node-gyp
git clone https://github.com/mongodb/js-bson.git
cd js-bson
npm install
node-gyp rebuild
Это работает как магия!!
Ответ 13
Сообщение расширения bson - это просто предупреждение, я получаю его все время в приложении nodejs.
Что нужно проверить:
- Экземпляр MongoDB. У вас работает экземпляр MongoDB?
- Конфигурация. Вы правильно настроили Mongoose для своего экземпляра MongoDB? Я подозреваю, что ваш конфиг неправильный, потому что сообщение об ошибке выплескивает очень странную строку для вашего имени хоста сервера mongodb..
Ответ 14
Мне нужно только выполнить эти команды в моем каталоге api:
rm -rf node_modules
npm cache clean
npm install
Ответ 15
Я только что побежал:
sudo npm install bson
и
sudo npm update
и все станет нормально.
Ответ 16
У меня также возникла эта проблема, и это не помогло моим сеансам. Но не сломать...
Я использовал соединение мангуста.
У меня было это:
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" в вашем пакете. Json! Просто Mongoose и connect-mongo.
Ответ 17
Я исправил это, изменив строку 10 из:
/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js
от:
bson = require('../build/Release/bson');
в:
bson = require('bson');
Ответ 18
Я исправил эту проблему на CentOS на
- sudo yum groupinstall "Средства разработки
- sudo npm install -g node -gyp
- rm -r node_modules
- npm cache clean
- npm install
Ответ 19
У меня была такая же проблема на моем экземпляре EC2. Я думаю, что первоначальная причина была в том, что у меня был экземпляр Node, когда я установил Mongo. Я остановил службу Node, а затем запустил
sudo npm update
внутри папки верхнего уровня моего проекта Node. Это фиксировало проблему, и все было как новый
Ответ 20
Вот как я исправил проблему на Ubuntu:
-
ln -s /usr/bin/nodejs /usr/bin/node
-
npm install node-gyp
-
cd node_modules/mongodb/node_modules/bson
-
node-gyp rebuild
Вдохновленный @mbochynski ответом, но сначала мне нужно было создать символическую ссылку, иначе восстановление не получилось.
Ответ 21
У меня была такая же проблема, как и у многих опций, но в последнем npm intall
в моей средней папке приложения работала.
Ответ 22
У меня была эта проблема, потому что я включил папку node_modules в мой репозиторий Git. Когда я перестроил node_modules на другой системе, он сработал. Один из них работал под управлением Linux, другой OS X. Возможно, у них также были разные архитектуры процессоров.
Ответ 23
Если расширение bson не было причиной, я догадался, что другой причиной "не удалось подключиться" будет идентификатор пользователя. Поэтому я создал новую базу данных и добавил пользователя для базы данных с паролем для этого пользователя ( note: не пароль учетной записи mongolab).
Я обновил их на своем коде и вуаля! Это сработало. Дух прав?: D
Ответ 24
Я также столкнулся с той же проблемой, и я являюсь пользователем Mac OSX. В принципе, вам нужно убедиться, что вы установили Xcode, а также "Инструменты командной строки" в Xcode.
Xcode является бесплатным и может быть загружен здесь:
https://developer.apple.com/xcode/downloads/
После того, как вы установили Xcode, откройте его и нажмите "Предпочтение" в раскрывающемся меню и нажмите значок "Загрузки". Убедитесь, что у вас установлены инструменты командной строки.
Затем запустите следующие команды, как и все остальные пользователи, упомянутые выше:
rm -rf node_modules
npm cache clean
npm install
Ответ 25
Я пытался запустить node в общей папке виртуальной машины (бродяга). Это была проблема. Мой хост-компьютер - это Windows, установленный node для Windows и работающий как шарм. Поэтому, если вы используете виртуальную машину, просто попробуйте запустить сервер node на хост-машине.
Ответ 26
У меня была такая же проблема, и буквально ничего не работало для меня. Ошибка показывала, что kerberos
вызывает проблему, и это была одна из зависимостей mongoose
. Поскольку я нахожусь на Ubuntu, я думал, что могут существовать проблемы с разрешениями между глобально установленными пакетами - в /usr/lib/node_modules
через sudo
и теми, которые находятся в пользовательском пространстве.
Я установил mongoose
по всему миру - с помощью sudo
, конечно, и все начало работать как ожидалось.
P.S. Пакет kerberos
теперь также устанавливается глобально рядом с mongoose
, однако я не могу вспомнить, сделал ли я это намеренно - пока я пытался решить проблему или был там с самого начала.
Ответ 27
Я работаю над 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
Ответ 28
В Windows 7.1 эти указания помогли мне исправить мою среду сборки:
https://github.com/mongodb/js-bson/issues/58#issuecomment-68217275
http://christiankvalheim.com/post/diagnose_installation_problems/
Ответ 29
Я смог решить, удалив и переустановив пакет monk.
Первоначальная установка, казалось бы, имела коррумпированную зависимость mongodb/bson.
Ответ 30
В Ubuntu 14.04 мне нужно было создать ссылку в /usr/bin
, потому что /usr/bin/env
искал /usr/bin/node
.
ln -s /usr/bin/nodejs /usr/bin/node
Сообщения об ошибках можно найти в builderror.log
в каждом каталоге, поэтому для сообщения:
[email protected] install/usr/local/lib/node_modules/mongodb/node_modules/mongodb-core/node_modules/bson
(node-gyp rebuild 2> builderror.log) || (exit 0)
посмотрите на этот файл для получения дополнительной информации о точной проблеме:
/usr/local/lib/node_modules/mongodb/node_modules/mongodb-core/node_modules/bson/builderror.log