C ++ BSON 확장을로드하지 못했습니다.


185

여기에 총 노드 멍청한 놈. 샘플 노드 앱을 설정하려고했지만 실행하려고 할 때마다 다음 오류가 계속 발생합니다.

노드 앱

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메시지가 관련이 없으며 실제로 중요하지 않을 수 있다고 생각합니다 . 몽고 연결 설정이 올바른지 확인 하시겠습니까?
loganfsmyth

1
재미있는 이야기 나는 Windows 시스템에서만이 오류가 발생합니다 ... 노드 -gyp 설치를 시도하지 않았지만 거의 모든 것을 시도했지만 여전히 오류가 발생합니다. chocoletey는 빌드 필수 요소를 설치하지 않습니다
Snymax

JS BSON 코드가 C ++만큼 빠르지 않습니까? 그렇다면 이것이 실제로 문제입니까?
UpTheCreek

이 문제가 발생하는 최신 iojs 사용자를 위해이 문제를 추적하기위한 티켓을 열었습니다. github.com/mongodb/js-bson/issues/136
bitinn

참고 : Keystone.js를 내 mvc 프레임 워크로 사용하고 있습니다. 나를 위해 "../build/Release/bson"을 "../browser_build/bson"으로 변경했습니다. 위로 올라가면 browser_build 폴더가 나타납니다.
Pranay Pant

답변:


201

mongodb 라이브러리를 설치할 때 사용 가능한 도구를 가지고 있지 않은 것 같습니다. 나는 당신이 할 것을 제안합니다

xcode-select --install(맥에서) 또는 sudo apt-get install gcc make build-essential(우분투에서)

실행

rm -rf node_modules
npm cache clean
npm install

또는 @tobias 주석을 기반으로 한 npm 업데이트 (빌드 필수 설치 후)

npm update

2
+1. 내가해야 할 일은 마지막 3 줄뿐이었습니다. 내가 건축되지 않은 이유는 mongoskin모듈의 일부이기 때문이라고 생각합니다 .
Matt Browne

2
와! 이 sudo apt-get install gcc make build-essential팁은 내가 본 최고의 Node.js + Ubuntu 개발 팁 중 하나입니다. 웹 애플리케이션을 개발하고 우분투에서 Node.js로 개발하는 데 익숙하다면 절대적으로 게임 체인저입니다.
Charney Kaye

3
설치하는 이유는 무엇입니까 gccmake함께는 build-essential? 후자는 다른 두 가지에 의존하므로 어쨌든 설치됩니다 ( packages.ubuntu.com/trusty/build-essential ). 이렇게 sudo apt-get install build-essential충분합니다.
Sergey

8
창문은 어떻습니까? Windows 명령 프롬프트 C : \ Users \ me> node C : \ Users \ me \ Desktop \ nodeproject \ datagen.js에서 이와 유사한 정보가 표시됩니다. {오류 : '../build/Release/bson'모듈을 찾을 수 없습니다. ] 코드 : 'MODULE_NOT_FOUND'} js-bson : 순수 JS 버전 {[오류 : 모듈 '../build/Release/bson'을 (를) 찾을 수 없음] 코드 : 'MODULE_NOT_FOUND'} js-bson : c ++ bson 확장을로드하지 못했습니다. 순수 JS 버전을 사용하여 c ++ bson 확장을로드하지 못했습니다. 서버에 올바르게 연결됨
ULLAS K

1
창문 기계는
어떻습니까

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을 편집하면 repo를 포크하고 npm / bower를 통해 수정 된 모듈을 설치하는 것이 좋습니다.
Christopher Marshall

4
이 답변은 효과가있었습니다. 몽구스의 개발자들, 이것을 고쳐주세요!
Steve K

23
이것은 해결책이 아니라 해킹입니다.
Ashesh

10
이것은 해결책이 아닙니다. 동일한 결과로 오류를 인쇄하는 문자열을 제거 할 수 있습니다. 이 오류는 bson에 대한 네이티브 c ++ 플러그인으로 인해 나타나지 않으며이 경우 js 구현이 사용됩니다.
Alendorff

36

raspbian (raspberry 용 데비안)에서 "c ++ bson 확장명을로드하지 못했습니다"라는 문제를 다음과 같이 정렬했습니다.

npm install -g node-gyp

그리고

npm update

3
npm update다른 것을 설치하지 않고도을 실행하여 문제를 해결했습니다 .
MalcolmOcean

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
창문은
어때

@JamieHutber 설치 VS 2013
Rahil Wazir

512MB RP1 의 DietPi 릴리스 에서이 작업을 수행했습니다 . 방금 파이썬 ( apt-get install python) 을 설치 한 다음 node_modules/mongoose/node_modules/mongodb/node_modules/bson/실행 시켜야한다고 언급하고 싶었습니다 make. 이 만들어졌습니다 Release/bson.node.
staticboy

20

일반적인 문제는 node-gyp에 Python 2.x가 필요하고 시스템의 python포인트가 3.x를 가리키는 경우 bson경고없이 컴파일되지 않습니다 . pythonnpm 구성에서 시스템의 2.x 실행 파일을 가리키는 전역 키를 설정하여이 문제를 해결할 수 있습니다 . 예를 들어, 아치 리눅스에서 :

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 설치와 호환되지 않는 것처럼 보이는 mongoose 버전 3.x를 실행하고 있다는 것입니다.
ChallengeAccepted

이것은 마침내 우분투에서도 실행되도록했습니다.
Jason Kennaly

예, Mac에서도 실행됩니다. 감사!
jos

무리 감사! Microsoft의 "You 've Got Documents! A MongoDB Jump Start"교육 세션에 이어 mongodb 패키지와 관련된 동일한 오류가 발생했습니다. 위의 단계는 해당 패키지에 대해 수행되었으며 충분히 실행되고 있습니다. :)
Fernando Madruga 2016

11

우분투 14.04를 실행 중이며 나를 위해 수정 하려면 여기에 설명 된대로 nodejs 를 가리 키도록 노드 에 대한 심볼릭 링크를 만들어야했습니다 .

우분투 12.04의 nodejs와 node

일단 그렇게하면이 명령을 다시 실행합니다.

rm -rf node_modules
npm cache clean
npm install

위대한 안토니! 또한 우분투 14.04에서 실행 중이며 귀하의 제안으로 문제가 해결되었습니다. 빌드 필수 요소를 설치하고 모든 것을 다시 설치하는 것만으로는 충분하지 않습니다. 또한 'node'를 추가해야했습니다.
Franco

8

그래서 내 경우에는 먼저이 디렉토리 / node_modules / mongoose / node_modules / 에서 bson 모듈 이 있는지 확인하려고했습니다 . 나는 처음에 그것을 가지고 있지 않다는 것을 알았습니다.

npm 설치 bson 

그리고

npm 업데이트

우분투에서 시험하고 시험했습니다.


나를 위해 일했지만, 또한 입력 make했습니다/devel/node_modules/bson/
exebook

1
나를 위해 일했다. npm 캐시를 청소하지 않았습니다. 사실, 모든 나는 / 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

sudo npm rebuild 나를 위해 고 쳤던 것이 었습니다.


8

내 mongodb 종속성 버전을 ~ 2.0.36 에서 업데이트 하여이 오류를 마침내 수정 했습니다 package.json.

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

광산은 약간 관련이 있었으며 mongod를 사용하고 있었고 mobgo db는 아닙니다 .
Brad B

5

불행히도, 위의 모든 답변은 절반 만 맞습니다. 이것을 알아 내기 위해 오랜 시간이 걸렸습니다 ..

npm을 통한 몽구스 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
Thomas Modeneis

4

나를 위해 api 디렉토리에서 다음 명령 만 실행하면됩니다.

rm -rf node_modules
npm cache clean 
npm install

4

방금 달렸다 :

sudo npm install bson

sudo npm update

그리고 모두 괜찮아집니다.


sudo 권한으로 npm을 실행하지 마십시오.
loganhuskins

sudo 공간에서 피할 수있는 것은 무엇이든해야합니다. 나는 그것이 심각한 문제를 일으킬 것이라고 생각하지 않으며 단지 좋은 습관입니다. 다음은 도움이 될만한 기사입니다 (John Papa를 좋아하는 것 외에는 보증 할 수 없음). johnpapa.net/how-to-use-npm-global-sudo-on-osx없이
loganhuskins

3

bson 확장 메시지는 단지 경고 일뿐입니다. nodejs 응용 프로그램에서 항상 얻습니다.

확인 사항 :

  • MongoDB 인스턴스 : MongoDB 인스턴스가 실행 중입니까?
  • 구성 : Mongoose를 MongoDB 인스턴스에 올바르게 구성 했습니까? 오류 메시지가 mongodb 서버 호스트 이름에 대해 매우 이상한 문자열을 뱉어 내기 때문에 구성이 잘못되었다고 생각합니다.

유용한 정보였습니다. 그 방법으로 mongolab 사용자 계정 정보와 데이터베이스의 실제 mongodb 사용자 정보를 혼합하고 있음을 알았습니다.
Theja

흠, 같은 문제가 발생합니다. 모든 것이 로컬 테스트 서버에서 작동했지만 mongoHQ를 사용하고 있으므로 로컬 mongo 인스턴스가 필요하지 않습니다. 다른 문제는 무엇입니까?
Karoh

그것을 잊어라, 아래의 Pradeep의 대답은 그것을 해결했다 :)
Karoh

3

CentOS 에서이 문제를 해결했습니다.

  • sudo yum groupinstall "개발 도구"
  • sudo npm install -g 노드 -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

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'가 없다는 것을 조심하십시오! 몽구스와 연결 몽고.


2

우분투에서 문제를 해결 한 방법은 다음과 같습니다.

  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 를 다시 빌드하면 작동했습니다. 그들 중 하나는 Linux를, 다른 OS X를 실행하고있었습니다. 다른 프로세서 아키텍처도 있었을 것입니다.


1

EC2 인스턴스에서 동일한 문제가 발생했습니다. 초기 원인은 Mongo를 설치할 때 Node 인스턴스가 실행 중이기 때문이라고 생각합니다. 노드 서비스를 중지 한 다음 실행했습니다.

sudo npm update 

내 노드 프로젝트의 최상위 폴더 내부. 이것은 문제를 해결했고 모든 것이 새로운 것과 같았습니다.


1

가상 머신 (vagrant) 공유 폴더에서 노드를 실행하려고했습니다. 그것은 문제였다. 내 호스트 컴퓨터는 Windows이며 Windows에 노드를 설치하고 매력처럼 작동했습니다. 따라서 가상 머신을 사용하는 경우 호스트 머신에서 노드 서버를 실행하십시오.


1

나는 방금 같은 문제가 있었고 말 그대로 아무것도 나를 위해 일하지 않았다. 오류가 표시 kerberos되어 문제가 발생했으며 이는 mongoose종속성 중 하나였습니다 . 우분투에 있기 때문에 전 세계적으로 설치된 패키지와 /usr/lib/node_modulesvia 사이 sudo및 사용자 공간에있는 패키지 사이에 권한 문제가있을 수 있다고 생각했습니다 .

물론 mongoose전 세계에 설치 sudo했으며 모든 것이 예상대로 작동하기 시작했습니다.

추신 : 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 package를 제거하고 다시 설치하여 해결할 수있었습니다. 초기 설치에 mongodb / bson 종속성이 손상된 것 같습니다.


1

Followint @ user1548357 모듈 파일 자체를 변경하기로 결정했습니다. 아래의 유효한 주석으로 지적 된 문제를 피하기 위해 설치 후 스크립트에 변경 사항을 포함시켜 설정하고 잊어 버릴 수 있으며 모듈을 설치할 때 실행될 것이라는 확신을 얻었습니다.

// 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

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

그게 다야 !!!


안녕, 답변 주셔서 감사합니다. 사람들이 쉽게 읽을 수 있도록 코드 예제에서 형식을 사용하십시오.
F_SO_K

1

Windows 7 (x64)에서 나를 돕는 유일한 방법 : https://stackoverflow.com/a/29714359/2670121

x32 버전으로 노드 및 파이썬을 다시 설치하십시오.
이 오류로 많은 시간을 보냈습니다.

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.