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 14

1
おもしろい話このエラーはWindowsマシンでしか発生しません... node-gypのインストールを試みたことはありませんが、他のほとんどすべてを試してもエラーが発生します。そしてchocoleteyはビルドエッセンシャルをインストールしません
Snymax '20

JS BSONコードは現在C ++とほぼ同じ速度ではありませんか?もしそうなら、これは本当に問題ですか?
UpTheCreek 2015

この問題を経験している新しいiojsの人々のために、私はこの問題を追跡するためのチケットをオープンしました:github.com/mongodb/js-bson/issues/136
bitinn

注:私はmvcフレームワークとしてKeystone.jsを使用しています。私にとっては、「../ build / Release / bson」を「../browser_build/bson」に変更します。上に行くと、browser_buildフォルダーが表示されます。
Pranay Pant 2017

回答:


201

mongodbライブラリをインストールしたときにmakeツールを使用できなかったと思います。することをお勧めします

xcode-select --install(mac)またはsudo apt-get install gcc make build-essential(ubuntu)

そして走る

rm -rf node_modules
npm cache clean
npm install

または、@ tobiasコメントに基づくnpm更新(build-essentialのインストール後)

npm update

2
+1。私がしなければならなかったのは、最後の3行だけでした。鉱山が構築されなかった理由は、mongoskinモジュールの一部として提供されたためです。
Matt Browne

2
うわー!そのsudo apt-get install gcc make build-essentialヒントは、私が今まで見た中で最高のNode.js + Ubuntu開発のヒントの1つです。Webアプリケーションの開発に慣れていて、UbuntuでNode.jsを使用して開発している場合、それは絶対的なゲームチェンジャーです。
Charney Kaye 14

3
インストールgccmake一緒にインストールする理由は何build-essentialですか?後者は他の2つに依存しているため、とにかくインストールされます(packages.ubuntu.com/trusty/build-essential)。やってsudo apt-get install build-essential十分なはずです。
セルゲイ

8
Windowsではどうですか?Windowsコマンドプロンプトで次のようになっていますC:\ Users \ me> node C:\ Users \ me \ Desktop \ nodeproject \ datagen.js {[エラー:モジュール '../build/Release/bson'が見つかりません]コード: 'MODULE_NOT_FOUND'} js-bson:純粋なJSバージョンを使用したc ++ bson拡張の読み込みに失敗しました{[エラー:モジュール '../build/Release/bson'が見つかりません]コード: 'MODULE_NOT_FOUND'} js-bson:サーバーに正しく接続された純粋なJSバージョンを使用して、c ++ bson拡張をロードでき
ませんでした

1
ウィンドウマシンはどうですか:(
Jamie Hutber、2015

100

私はそれを解決しました。

npmでmongooseモジュールをインストールすると、そのフォルダーにビルドされたbsonモジュールがありません。ファイルnode_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.jsで、行を変更します

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

bson = require('bson');

次に、npmを使用してbsonモジュールをインストールします。


36
node_modulesディレクトリ内のものを変更することは良い考えですか?それはもろく見える
ダグラスファーガソン

6
@DouglasFerguson本当に。node_moduleを編集する場合は、リポジトリをフォークして、変更したモジュールをnpm / bower経由でインストールすることをお勧めします。
クリストファーマーシャル

4
この答えはうまくいきました。Mongooseの開発者、これを修正してください!
スティーブK

23
これはハックであり、修正ではありません。
Ashesh

10
これは解決策ではありません。同じ結果で、エラーを出力する文字列を削除できます。このエラーは、bsonのネイティブc ++プラグインが見つからないために表示され、この場合は、js実現が使用されます。
アレンドルフ2015年

36

raspbian(raspberryの場合はdebian)で「Failed to load c ++ bson extension」を取得する問題を次のように分類しました。

npm install -g node-gyp

その後

npm update

3
npm update他に何もインストールすることなく、を実行するだけで問題を解決しました。
MalcolmOcean 2015年

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が言ったように、彼によって提案されたnpm更新も危険です。すべてのモジュールが更新され、危険な場合があります(バージョン間でAPIが変更される場合があります)。

node_modules / mongodb / node_modules / bsonディレクトリに移動し、そこから使用することをお勧めします

node-gyp rebuild

これで問題は解決しました。


5
Windowsについてはどうですか:(
Jamie Hutber

@JamieHutber Install VS 2013
Rahil Wazir 2015

512MB RP1のDietPiのリリースでこれを行っていました。私はPythonapt-get install python)をインストールしてからnode_modules/mongoose/node_modules/mongodb/node_modules/bson/run 内からインストールする必要があることを述べたかっただけmakeです。これが作成しましたRelease/bson.node
staticboy、2015

20

よくある問題は、node-gypがPython 2.xを必要とし、システムpythonが3.xを指している場合、bson警告なしにコンパイルに失敗することです。これを修正するpythonには、システムの2.x実行可能ファイルを指すグローバルキーをnpm構成に設定します。たとえば、Arch Linuxでは:

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

19

WIN 8.1の場合

私のpackage.jsonファイルで間違ったバージョンのマングースを使用しているようです。

"mongoose" : "^3.8.15"から行を削除しましたpackage.json

CLI:

npm install mongoose --save

今それは言い"mongoose": "^4.0.6"package.json私が持っていたエラーは消えました。


ありがとうございました!キーボードで頭をたたく無数の時間から私を救った。これは、Windowsで機能する最後で唯一のソリューションでした。問題は、自分のPCにインストールされている最新のmongodbと互換性がないように見えるバージョン3.xのmongooseを実行していたことでした。
チャレンジ

これでようやくUbuntuでも実行できるようになりました。
Jason Kennaly、2015

はい、Macでも動作します。ありがとう!
jos

本当にありがとう!Microsoftの「You've Got Documents!A MongoDB Jump Start」トレーニングセッションに続いて同じエラーが発生しましたが、mongodbパッケージにのみ関連しています。そのための上記の手順を実行したところ、確かに実行されています。:)
Fernando Madruga

11

私はUbuntu 14.04を実行していて、それを修正するために、nodejsを指すようにnodeのシンボリックリンクを作成する必要がありました:

nodejsとubuntu 12.04のノード

それができたら、次のコマンドを再実行しました。

rm -rf node_modules
npm cache clean
npm install

素晴らしいアンソニー!私はUbuntu 14.04でも実行しています。あなたの提案で問題は解決しました。build-essentialをインストールしてすべてを再インストールするだけでは不十分です。「node」lnも追加する必要がありました。
フランコ

8

そのため、私の場合、私は最初にこのディレクトリ/ node_modules / mongoose / node_modules /の下を確認してみました。これは、bsonモジュールがあることを確認するためだけです。そもそも持っていなかったので走ってみた

npm install bson 

その後

npmアップデート

すべてがソートされました.Ubuntuで試してテストしました。


私のためにも働いたが、私もタイプmakeした/devel/node_modules/bson/
exebook 2014年

1
私のために働いた。npmキャッシュのクリーニングは行いませんでした。実際には、すべてのI / node_modules /マングースRANからだったnpm install bson
RichieRich

8

私もエラーがあったと言いたかっただけ

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

しかし、他のエラーはありません。私は何でも試してみましたが、package.jsonファイルで指定していたmongodbドライバーは、私のバージョンのMongoDBと互換性がありませんでした。私はそれを私の最新バージョン(1.4.34)に変更し、うまくいきました!!!


実際、npm install mongodb @ latestが問題を解決してくれました
tam.teixeira


8

私は最終的に私のMongoDB依存関係のバージョンを更新することにより、このエラーを訂正〜2.0.36package.json

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

私は少し関連性があり、私はmongodを使用しており、mobgo dbではありませんでした。
Brad B

5

残念ながら、上記の答えはすべて正解です。これを理解するには長い時間がかかりました。

npmを介したMongoose bsonのインストールで警告がスローされ、エラーが発生します...

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
トーマスModeneis

4

私にとっては、これらのコマンドを私のapiディレクトリで実行するだけです:

rm -rf node_modules
npm cache clean 
npm install

4

私はただ走った:

sudo npm install bson

そして

sudo npm update

そして、すべて大丈夫になります。


sudo権限でnpmを実行することは非常に避けてください。
loganhuskins 2016年

sudoスペースでの使用を避けることができるものはすべて必要です。悲惨な問題が発生することはないと思いますが、それは単なる良い習慣です。こちらが役立つ記事です(John Papaを好きになること以外は保証できません)。johnpapa.net/how-to-use-npm-global-without-sudo-on-osx
loganhuskins

3

bson拡張メッセージは単なる警告です。nodejsアプリケーションで常に表示されます。

確認すること:

  • MongoDBインスタンス:MongoDBインスタンスを実行していますか?
  • 構成:MongooseをMongoDBインスタンスに正しく構成しましたか?エラーメッセージがmongodbサーバーのホスト名の非常に奇妙な文字列を吐き出すので、私はあなたの設定が間違っていると思います。

それは有益な情報でした。これで、データベースの実際のmongodbユーザー情報とmongolabユーザーアカウント情報を混同していることがわかりました。
Theja 2014

うーん、同じ問題が発生しています。ローカルテストサーバーですべてが機能していて、mongoHQを使用しているので、ローカルmongoインスタンスは必要ありません。他に何が問題になっているのでしょうか。
Karoh、2014年

それを忘れてください、以下のプラディープの答えはそれを解決しました:)
Karoh

3

CentOSでこの問題を修正しました

  • sudo yum groupinstall "開発ツール"
  • sudo npm install -g node-gyp
  • rm -r node_modules
  • npmキャッシュクリーン
  • npmインストール

@Thejaによれば、エラーはWindowsマシンでのみ発生するとのことです。
Pawel Veselov

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 2015年

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

トリックをしました。package.jsonに「mongodb」がないことに注意してください!Mongooseとconnect-mongoだけです。


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

Gitリポジトリにnode_modulesフォルダーを含めていたため、この問題が発生しました。他のシステムでnode_modulesを再構築したところうまくいきました。そのうちの1つはLinuxを実行し、もう1つはOS Xを実行していました。おそらく、それらは異なるプロセッサアーキテクチャも持っていました。


1

EC2インスタンスでも同じ問題が発生しました。最初の原因は、MongoをインストールしたときにNodeインスタンスが実行されていたためだと思います。Nodeサービスを停止して実行した

sudo npm update 

ノードプロジェクトの最上位フォルダ内。これで問題が解決し、すべてが新品同様でした


1

仮想マシン(vagrant)共有フォルダーでノードを実行しようとしました。それが問題でした。私のホストマシンはWindowsであり、Windowsにインストールされたノードであり、魅力のように機能しました。したがって、仮想マシンを使用している場合は、ホストマシンでノードサーバーを実行してみてください。


1

私は同じ問題を抱えていて、文字通り何もうまくいきませんでした。エラーがkerberos原因で問題が発生しており、mongoose依存関係の1つでした。私はUbuntuを使用しているので、グローバルにインストールされたパッケージ(/usr/lib/node_modulesvia経由sudo)とユーザースペースにあるパッケージの間のどこかに権限の問題があるのではないかと思いました。

私はmongooseグローバルにインストールしました- sudoもちろん、すべてが期待どおりに機能し始めました。

PS kerberosパッケージは現在mongoose、の横にもグローバルにインストールされていますが、意図的にそれを行ったかどうか、つまり、問題を解決しようとしているか、最初から存在していたかは思い出せません。


1

私はcentOS 7でDockerに取り組んでいますが、同じ問題が発生しました。

周りを見て、何度か試した後、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


1

monkパッケージをアンインストールして再インストールすることで解決できました。初期インストールでは、mongodb / bsonの依存関係が壊れているようです。


1

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

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 2018

1

Windows 7(x64)で私を助ける唯一のもの:https : //stackoverflow.com/a/29714359/2670121

x32バージョンでノードとpythonを再インストールします。
私はこのエラーに多くの時間を費やしました:

C ++ BSON拡張機能の読み込みに失敗しました

最後に、モジュールnode-gyp(ネイティブアドオンをビルドするため)をインストールし、さらにVisual StudioでWindows SDKをインストールした場合、nodejsはアセンブルされたモジュールをモジュールbson.nodeとして認識しませんでした。再インストール後、問題はなくなりました。

繰り返しますが、このエラーはどういう意味ですか?

実際には、それはエラーではありません。あなたはまだマングースを使うことができます。ただし、この場合、bsonモジュールをネイティブで高速に実現する代わりにjs-realization、が遅くなります。

私は「node_modulesの内部のパスを編集...」のような多くのヒントを見ました-これは問題を解決せず、エラーメッセージをオフにするだけなので、まったく役に立ちません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.