ここに総ノード数。サンプルノードアプリを設定しようとしましたが、実行しようとするたびに次のエラーが表示され続けます。
ノードアプリ
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)
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
私はそれを解決しました。
あなたが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モジュールをインストールします。
私はraspbian(raspberry用のdebian)で "c ++ bson拡張モジュールをロードできませんでした"という問題を解決しました。
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)
それから私はnode-gypをインストールしました
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
をコンパイルすることに失敗するでしょう。あなたのシステムの2.x実行可能ファイルを指すあなたのnpm設定でpython
グローバルキーを設定することによってこれを修正することができます。たとえば、Arch Linuxの場合:
npm config -g set python "/usr/bin/python2"
WIN 8.1に
Package.jsonファイルで間違ったバージョンのmongooseを使用したようです。
Package.jsonから "mongoose": "^ 3.8.15"の行を削除しました。
CLI:npm install mongoose --save
これで、package.jsonに "mongoose": "^ 4.0.6"と表示され、エラーがなくなった。
私はUbuntu 14.04を実行しています。修正するには、nodejsを指すようにノードのシンボリックリンクを作成する必要がありました。
それをした後、私はこれらのコマンドを再実行しました:
rm -rf node_modules
npm cache clean
npm install
私もエラーがあったと言ってほしかった
Failed to load c++ bson extension, using pure JS version
しかし、他のエラーはありません。私はすべてを試してみましたが、package.jsonファイルで指定していたmongodbドライバが私のバージョンのMongoDBと互換性がないことがわかりました。私はそれを(1.4.34)であった私の最新バージョンに変更しました、そしてそれはうまくいきました!!!
Sudo npm rebuild
は私にとってそれを修正したものでした。
Package.jsonでmongodb依存関係のバージョンを "〜2.0.36"に更新することで、このエラーをようやく修正しました。
"dependencies": {
"consolidate": "~0.9.1",
"express": "3.x",
"mongodb": "~2.0.36",
"mongoose": "^4.1.12"
}
だから私の場合、私は最初にこのディレクトリの下をチェックしようとしました / node_modules/mongoose/node_modules /私が持っていることを確認するためだけに bson モジュール。私はそもそもそれを持っていなかったことを考え出した、そして私はただ走る
npm install bson
その後
npm更新
すべてソートされました。TbiedとUbuntuでテストされました。
残念ながら、上記の答えはすべて半分しかありません。
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
これは魔法のように動作します!
私にとっては、これらのコマンドを私のapiディレクトリで実行するだけで済みます。
rm -rf node_modules
npm cache clean
npm install
私は走ったばかりです:
Sudo npm install bson
そして
Sudo npm update
そしてすべてが大丈夫になります。
Bson拡張メッセージは単なる警告です、私は私のnodejsアプリケーションでいつもそれを得ます。
確認事項:
私はCentOSでこの問題を修正しました。
私もこの問題を抱えていたため、セッションが機能しませんでした。でも壊れないように….
マングース接続を使用しました。
私はこれを持っていました:
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。
Gitリポジトリにnode_modulesフォルダを含めていたため、この問題が発生しました。他のシステムでnode_modulesを再構築したとき、それはうまくいきました。そのうちの1つはLinux、もう1つはOS Xを実行していました。たぶんそれらは異なるプロセッサアーキテクチャを持っていました。
Ubuntuの問題を修正する方法は次のとおりです。
ln -s /usr/bin/nodejs /usr/bin/node
npm install node-gyp
cd node_modules/mongodb/node_modules/bson
node-gyp rebuild
@mbochynskiの答えに触発されたが、私は最初にシンボリックリンクを作成しなければならなかった。
私は同じ問題を抱えていたので、多くのオプションを試してみましたが、最後のnpm intall
では、appフォルダがうまくいきました。
私のEC2インスタンスでも同じ問題がありました。最初の原因は、MongoをインストールしたときにNodeインスタンスが実行されていたためだと思います。 Nodeサービスを停止してから実行しました
Sudo npm update
私のノードプロジェクトのトップレベルフォルダの中これで問題は解決し、すべてがまったく新しいものだった
/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.jsの10行目を次のように変更して修正しました。
bson = require('../build/Release/bson');
に:
bson = require('bson');
/ 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
私たちの場合、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環境変数を設定すると解決しました。
拡張子bsonが原因ではない場合、「接続に失敗した」という他の理由はユーザーIDによるものと考えられます。そこで、私は新しいデータベースを作成し、そのユーザーのパスワードを使ってデータベースのユーザーを追加しました(note:mongolabアカウントのパスワードではありません)。私は自分のコードでそれらを更新しました。出来た。ええ、そうでしょ? :D
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');
});
});
Monkパッケージをアンインストールおよび再インストールすることで解決できました。初期インストールでは、破損したmongodb/bson依存関係があるようです。
私も同じ問題に遭遇し、私はMac OSXユーザーです。基本的には、XcodeとXcode内の「コマンドラインツール」をインストールしたことを確認する必要があります。
Xcodeは無料で、ここからダウンロードできます。 https://developer.Apple.com/xcode/downloads/
Xcodeをインストールした後、それを開いてプルダウンメニューの中の「設定」をクリックし、そして「ダウンロード」アイコンをクリックしてください。 「コマンドラインツール」がインストールされていることを確認してください。
次に、上記の他のすべてのユーザーと同様に、次のコマンドを実行します。
rm -rf node_modules
npm cache clean
npm install
私の場合は、私は自分のローカルマシン(Mac)上のすべてのモジュールをnpm install
し、.gitignoreにnode_modulesを含めず、githubにアップロードしました。それから私はプロジェクトを私のawにクローンしました、ご存知のように、それはLinuxを実行しているので、私はエラーを得ました。私がしたのは、.gitignoreにnode_modulesをインクルードし、私のawsインスタンスでnpm install
を使うだけです。
Windows 7.1では、以下の指示が私のビルド環境を修正するのに役立ちました。
https://github.com/mongodb/js-bson/issues/58#issuecomment-68217275
http://christiankvalheim.com/post/diagnose_installation_problems/
Windows 7(x64)で私を助けてくれる唯一のもの: https://stackoverflow.com/a/29714359/2670121
X32バージョンでnodeとpythonを再インストールしてください。
私はこのエラーに多くの時間を費やし(c ++ bson拡張モジュールのロードに失敗しました)、そして最後にモジュールnode-gyp
(ネイティブアドオンのビルド用)をインストールしました。モジュールとしてbson.node。再インストール後、問題は解決しました。
繰り返しますが、このエラーはどういう意味ですか?
実際には、それは間違いではありません。あなたはまだマングースを使用することができます。しかし、この場合、bsonモジュールの高速ネイティブ実現の代わりに、js実現が遅くなります。 「node_modulesの内側のパスを編集...」のような多くのヒントを見ました - 問題を解決するのではなく、単にエラーメッセージを表示しないため、これはまったく役に立ちません。
私は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
この行を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');
それがすべてです!
仮想マシン(vagrant)共有フォルダでノードを実行しようとしていました。それは問題でした。私のホストマシンはWindowsで、Windowsにノードがインストールされていて魅力的に働きました。仮想マシンを使用している場合は、ホストマシン上でノードサーバーを実行してみてください。
私はちょうど同じ問題を抱えていたし、文字通り何も私にはうまくいきませんでした。エラーはkerberos
が問題の原因であることを示しており、それはmongoose
の依存関係の1つでした。私はUbuntuを使っているので、グローバルにインストールされたパッケージの間のどこかにパーミッションの問題があるかもしれないと思いました - Sudo
を介した/usr/lib/node_modules
とユーザースペース上のもの。
私はmongoose
をグローバルにインストールしました - もちろんSudo
で、そして期待通りにすべてが動き始めました。
P.S kerberos
パッケージもmongoose
の隣にグローバルにインストールされるようになりました。しかし、問題を解決しようとしていたとき、または最初からあったかどうかを思い出せません。