web-dev-qa-db-ja.com

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)
184
Theja

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
200
Pradeep Mahdevu

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

あなたが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モジュールをインストールします。

100
user1548357

私はraspbian(raspberry用のdebian)で "c ++ bson拡張モジュールをロードできませんでした"という問題を解決しました。

npm install -g node-gyp

その後

npm update
36
datatracer

私はこれを解決することができませんでした

今まで。まず第一にあなたは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

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

26
mbochynski

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

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

WIN 8.1に

Package.jsonファイルで間違ったバージョンのmongooseを使用したようです。

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

CLI:npm install mongoose --save

これで、package.jsonに "mongoose": "^ 4.0.6"と表示され、エラーがなくなった。

18
Oak

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

nodejsとubuntu 12.04上のノード

それをした後、私はこれらのコマンドを再実行しました:

rm -rf node_modules
npm cache clean
npm install
10
Anthony

私もエラーがあったと言ってほしかった

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

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

8
the pickle

Sudo npm rebuildは私にとってそれを修正したものでした。

7
Zach Dahl

Package.jsonでmongodb依存関係のバージョンを "〜2.0.36"に更新することで、このエラーをようやく修正しました。

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

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

npm install bson 

その後

npm更新

すべてソートされました。TbiedとUbuntuでテストされました。

7
Steven

残念ながら、上記の答えはすべて半分しかありません。

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

これは魔法のように動作します!

4
Rama Prashanth

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

rm -rf node_modules
npm cache clean 
npm install
3
Adam Gądziak

私は走ったばかりです:

Sudo npm install bson

そして

Sudo npm update

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

3
Vladimir Kovpak

Bson拡張メッセージは単なる警告です、私は私のnodejsアプリケーションでいつもそれを得ます。

確認事項:

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

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

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

私もこの問題を抱えていたため、セッションが機能しませんでした。でも壊れないように….

マングース接続を使用しました。

私はこれを持っていました:

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'がないことを気を付けてください。ただマングースとconnect-mongo。

2
KLoozen

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

1
marcmtlca

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の答えに触発されたが、私は最初にシンボリックリンクを作成しなければならなかった。

1
collimarco

私は同じ問題を抱えていたので、多くのオプションを試してみましたが、最後のnpm intallでは、appフォルダがうまくいきました。

1
ashishkumar148

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

Sudo npm update 

私のノードプロジェクトのトップレベルフォルダの中これで問題は解決し、すべてがまったく新しいものだった

1
Lloyd Banks

/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.jsの10行目を次のように変更して修正しました。

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

に:

bson = require('bson');
1
jorgefpastor

/ usr/bin/envが/ usr/bin/nodeを探していたため、/ usr/binにリンクを作成する必要がありました。

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)|| (0番出口)

正確な問題についての詳細はこのファイルを見てください

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

0
Bob

私たちの場合、c ++バージョンのbsonが見つからなかったのは、私たちが企業の代理人であり、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環境変数を設定すると解決しました。

0
Matt M.

拡張子bsonが原因ではない場合、「接続に失敗した」という他の理由はユーザーIDによるものと考えられます。そこで、私は新しいデータベースを作成し、そのユーザーのパスワードを使ってデータベースのユーザーを追加しました(note:mongolabアカウントのパスワードではありません)。私は自分のコードでそれらを更新しました。出来た。ええ、そうでしょ? :D

0
Theja

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

Monkパッケージをアンインストールおよび再インストールすることで解決できました。初期インストールでは、破損したmongodb/bson依存関係があるようです。

0
johnkop

私も同じ問題に遭遇し、私はMac OSXユーザーです。基本的には、XcodeとXcode内の「コマンドラインツール」をインストールしたことを確認する必要があります。

Xcodeは無料で、ここからダウンロードできます。 https://developer.Apple.com/xcode/downloads/

Xcodeをインストールした後、それを開いてプルダウンメニューの中の「設定」をクリックし、そして「ダウンロード」アイコンをクリックしてください。 「コマンドラインツール」がインストールされていることを確認してください。

次に、上記の他のすべてのユーザーと同様に、次のコマンドを実行します。

rm -rf node_modules
npm cache clean
npm install
0
Sunny Ip

私の場合は、私は自分のローカルマシン(Mac)上のすべてのモジュールをnpm installし、.gitignoreにnode_modulesを含めず、githubにアップロードしました。それから私はプロジェクトを私のawにクローンしました、ご存知のように、それはLinuxを実行しているので、私はエラーを得ました。私がしたのは、.gitignoreにnode_modulesをインクルードし、私のawsインスタンスでnpm installを使うだけです。

0
Jie

Windows 7.1では、以下の指示が私のビルド環境を修正するのに役立ちました。

https://github.com/mongodb/js-bson/issues/58#issuecomment-68217275

http://christiankvalheim.com/post/diagnose_installation_problems/

0
dbasch

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

X32バージョンでnodeとpythonを再インストールしてください。
私はこのエラーに多くの時間を費やし(c ++ bson拡張モジュールのロードに失敗しました)、そして最後にモジュールnode-gyp(ネイティブアドオンのビルド用)をインストールしました。モジュールとしてbson.node。再インストール後、問題は解決しました。

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

実際には、それは間違いではありません。あなたはまだマングースを使用することができます。しかし、この場合、bsonモジュールの高速ネイティブ実現の代わりに、js実現が遅くなります。 「node_modulesの内側のパスを編集...」のような多くのヒントを見ました - 問題を解決するのではなく、単にエラーメッセージを表示しないため、これはまったく役に立ちません。

0
Alendorff

私は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
0
bolerovt

この行をtryとcatchブロックパスの両方を追加するだけで、簡単に問題を解決できます。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'); 

それがすべてです!

0
mallikarjuna gv

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

0
Lukas

私はちょうど同じ問題を抱えていたし、文字通り何も私にはうまくいきませんでした。エラーはkerberosが問題の原因であることを示しており、それはmongooseの依存関係の1つでした。私はUbuntuを使っているので、グローバルにインストールされたパッケージの間のどこかにパーミッションの問題があるかもしれないと思いました - Sudoを介した/usr/lib/node_modulesとユーザースペース上のもの。

私はmongooseをグローバルにインストールしました - もちろんSudoで、そして期待通りにすべてが動き始めました。

P.S kerberosパッケージもmongooseの隣にグローバルにインストールされるようになりました。しかし、問題を解決しようとしていたとき、または最初からあったかどうかを思い出せません。

0
Mahdi