Не удалось загрузить расширение 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"
}
Просто хотел сказать, у меня тоже была ошибка
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:
ln -s /usr/bin/nodejs /usr/bin/node
npm install node-gyp
cd node_modules/mongodb/node_modules/bson
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