ไม่สามารถโหลดส่วนขยาย 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

1
เรื่องขำขันฉันได้รับข้อผิดพลาดนี้บนเครื่องที่ใช้ Windows เท่านั้น ... havent พยายามติดตั้ง node-gyp แต่ ive ได้ลองเกือบทุกอย่างแล้วยังคงได้รับข้อผิดพลาด และ 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(สำหรับ mac) หรือsudo apt-get install gcc make build-essential(บน Ubuntu)

และเรียกใช้

rm -rf node_modules
npm cache clean
npm install

หรือเพียงอัปเดต npm ตามความคิดเห็น @tobias (หลังจากติดตั้ง build-essential)

npm update

2
+1 สิ่งที่ฉันต้องทำคือ 3 บรรทัดสุดท้าย - ฉันคิดว่าเหตุผลที่ฉันไม่ได้สร้างขึ้นมาเพราะมันมาเป็นส่วนหนึ่งของmongoskinโมดูล
Matt Browne

2
ว้าว! ที่sudo apt-get install gcc make build-essentialปลายเป็นหนึ่งในสิ่งที่ดีที่สุด Node.js + Ubuntu เคล็ดลับการพัฒนาที่ฉันเคยเห็น มันเป็นตัวเปลี่ยนเกมที่สมบูรณ์แบบถ้าคุณคุ้นเคยกับการพัฒนาเว็บแอปพลิเคชันและเพิ่งพัฒนาด้วย Node.js บน Ubuntu
Charney Kaye

3
อะไรคือสาเหตุของการติดตั้งgccและmakeพร้อมกับbuild-essential? หลังขึ้นอยู่กับอีกสองคนดังนั้นพวกเขาจึงจะถูกติดตั้งต่อไป ( packages.ubuntu.com/trusty/build-essential ) การทำsudo apt-get install build-essentialควรจะเพียงพอ
Sergey

8
วิธีการเกี่ยวกับ windows? ฉันได้รับสิ่งนี้ในพรอมต์คำสั่ง windows ของฉัน C: \ Users \ me> โหนด C: \ Users \ me \ Desktop \ nodeproject \ datagen.js {[ข้อผิดพลาด: ไม่พบโมดูล '../build/Release/bson' รหัส]: 'MODULE_NOT_FOUND'} js-bson: ไม่สามารถโหลดส่วนขยาย c ++ bson โดยใช้รุ่น JS บริสุทธิ์ {[ข้อผิดพลาด: ไม่สามารถหาโมดูล '../build/Release/bson'] รหัส: 'MODULE_NOT_FOUND'} js-bson: ไม่สามารถโหลด c ++ bson extension โดยใช้ pure JS version เชื่อมต่อกับเซิร์ฟเวอร์ได้อย่างถูกต้อง
ULLAS K

1
สิ่งที่เกี่ยวกับเครื่องหน้าต่าง :(
Jamie Hutber

100

ฉันเพิ่งแก้ไขมัน

เมื่อคุณติดตั้งโมดูลพังพอนโดย npm โมดูลนี้จะไม่มีโมดูล bson ภายในในโฟลเดอร์ ในไฟล์node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.jsให้เปลี่ยนบรรทัด

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

ถึง

bson = require('bson');

จากนั้นติดตั้งโมดูล bson โดยใช้ npm


36
เป็นความคิดที่ดีหรือไม่ที่จะเปลี่ยนแปลงสิ่งต่างๆภายในไดเรกทอรี node_modules ดูเหมือนจะเปราะบาง
Douglas Ferguson

6
@ DouglasFerguson ไม่ได้จริงๆ หากคุณแก้ไข node_module ฉันขอแนะนำให้ฟอร์ก repo และติดตั้งโมดูลที่แก้ไขผ่าน npm / bower
คริสโตเฟอร์มาร์แชลล์

4
คำตอบนี้ใช้ได้ ผู้พัฒนาที่ Mongoose โปรดแก้ไขสิ่งนี้!
Steve K

23
นี่คือแฮ็คไม่ใช่การแก้ไข
Ashesh

10
นี่ไม่ใช่วิธีแก้ปัญหา ด้วยผลลัพธ์เดียวกันคุณสามารถลบสตริงที่พิมพ์ข้อผิดพลาด ข้อผิดพลาดนี้ปรากฏขึ้นเนื่องจากปลั๊กอินพื้นเมือง c ++ สำหรับไม่พบ bson และในกรณีนี้จะใช้ js realization
Alendorff

36

ฉันได้เรียงลำดับปัญหาของการ "ล้มเหลวในการโหลดส่วนขยาย c ++ bson" ใน raspbian (debian สำหรับ raspberry) โดย:

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
แล้ว windows :(
Jamie Hutber

@JamieHutber ติดตั้ง VS 2013
Rahil Wazir

ฉันทำสิ่งนี้ในการวางจำหน่ายDietPiบน 512MB RP1 แค่อยากจะบอกว่าผมมีการติดตั้งหลาม ( 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โดยไม่มีการเตือนล่วงหน้า คุณสามารถแก้ไขได้โดยการตั้งค่าpythonคีย์สากลในการกำหนดค่าnpm ที่ชี้ไปที่ปฏิบัติการ 2.x ในระบบของคุณ ตัวอย่างเช่นบน Arch Linux:

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

19

เมื่อวันที่ 8.1

ดูเหมือนว่าฉันใช้พังพอนผิดรุ่นในpackage.jsonไฟล์ของฉัน

ฉันออกเส้นจาก"mongoose" : "^3.8.15"package.json

CLI:

npm install mongoose --save

ตอนนี้มันพูด"mongoose": "^4.0.6"ในpackage.jsonและข้อผิดพลาดที่ฉันได้หายไป


ขอบคุณ! คุณช่วยฉันจากการทุบตีบนแป้นพิมพ์หลายชั่วโมง นี่เป็นทางออกสุดท้ายและเดียวที่ทำงานบน windows ปัญหาคือฉันกำลังเรียกใช้พังพอนรุ่น 3.x ซึ่งดูเหมือนจะไม่เข้ากันกับการติดตั้ง mongodb ล่าสุดบนพีซีของฉัน
ChallengeAccepted

ในที่สุดก็ทำให้ฉันใช้ Ubuntu ได้เช่นกัน
Jason Kennaly

ใช่ทำงานบน Mac เช่นกัน ขอบคุณ!
jos

ขอบคุณมัด! ติดตามเซสชั่นการฝึกอบรม "คุณได้รับเอกสารของ Microsoft! MongoDB Jump Start" แล้วและมีข้อผิดพลาดเดียวกันเกี่ยวข้องกับแพ็คเกจ mongodb เท่านั้น - ทำตามขั้นตอนข้างต้นสำหรับหนึ่งและเพียงพอแล้วตอนนี้ก็กำลังทำงานอยู่! :)
Fernando Madruga

11

ฉันใช้ Ubuntu 14.04 และแก้ไขให้ฉันฉันต้องสร้าง symlink สำหรับnodeเพื่อชี้ไปที่nodejsตามที่อธิบายไว้ที่นี่:

nodejs vs node บน Ubuntu 12.04

เมื่อฉันทำแล้วฉันก็จะรันคำสั่งเหล่านี้อีกครั้ง:

rm -rf node_modules
npm cache clean
npm install

แอนโธนีที่ยอดเยี่ยม! ฉันยังใช้งาน Ubuntu 14.04 และข้อเสนอแนะของคุณแก้ไขปัญหาให้ฉันได้ ไม่เพียงพอที่จะติดตั้ง build-essential และติดตั้งใหม่ทุกอย่าง: ฉันต้องเพิ่ม 'node' ln ด้วย
Franco

8

ดังนั้นในกรณีของฉันฉันแรกพยายามตรวจสอบภายใต้ไดเรกทอรีนี้/ node_modules / พังพอน / node_modules /เพียงเพื่อยืนยันว่าฉันมีโมดูลbson ฉันคิดว่าฉันไม่ได้มีมันตั้งแต่แรกแล้วฉันก็วิ่ง

npm ติดตั้ง bson 

แล้ว

ปรับปรุง npm

ทั้งหมดได้รับการจัดเรียงพยายามและทดสอบใน Ubuntu


ทำงานให้ฉันด้วย แต่ฉันก็พิมพ์makeด้วย/devel/node_modules/bson/
exebook

1
ทำงานให้ฉัน การล้างแคช npm ไม่ได้ ที่จริงแล้วสิ่งที่ฉันทำคือจาก / node_modules / พังพอนวิ่งnpm install bson
RichieRich

8

แค่อยากจะบอกว่าฉันก็มีข้อผิดพลาด

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

แต่ไม่มีข้อผิดพลาดอื่น ๆ ฉันลองทุกอย่างและกลับกลายเป็นว่าไดรเวอร์ MongoDB ที่ฉันระบุไว้ในไฟล์ package.json ไม่เข้ากันกับ MongoDB รุ่นของฉัน ฉันเปลี่ยนเป็นเวอร์ชั่นล่าสุดซึ่งเป็น (1.4.34) และใช้งานได้ !!!


ติดตั้งแน่นอน npm mongodb @ แก้ไขล่าสุดสำหรับฉันปัญหา
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 ฐานข้อมูล
แบรด B

5

น่าเสียดายที่คำตอบทั้งหมดข้างต้นมีเพียงครึ่งเดียวเท่านั้น .. ใช้เวลานานกว่าจะคิดออก ..

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

มันใช้งานได้เหมือนเวทมนตร์ !!


สิ่งนี้ล้มเหลวโดยมีข้อผิดพลาด:$ 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

และทั้งหมดก็โอเค


คุณควรหลีกเลี่ยงการเรียกใช้ npm ด้วยสิทธิ์ sudo
loganhuskins

สิ่งที่คุณสามารถหลีกเลี่ยงได้ในพื้นที่ sudo คุณควร ฉันไม่คิดว่ามันจะทำให้เกิดปัญหาร้ายแรงใด ๆ มันเป็นเพียงการปฏิบัติที่ดี นี่คือบทความที่อาจช่วยได้ (ไม่สามารถรับรองได้นอกเหนือจากความชอบ John Papa) johnpapa.net/how-to-use-npm-global-without-sudo-on-osx
loganhuskins

3

ข้อความส่วนขยาย bson เป็นเพียงคำเตือนฉันได้รับมันตลอดเวลาในแอปพลิเคชัน nodejs ของฉัน

สิ่งที่ต้องตรวจสอบ:

  • อินสแตนซ์ MongoDB : คุณมีอินสแตนซ์ MongoDB ทำงานอยู่หรือไม่?
  • Config : คุณได้อย่างถูกต้องกำหนดค่าพังพอนอินสแตนซ์ MongoDB ของคุณหรือไม่ ฉันสงสัยว่าการตั้งค่าของคุณผิดเพราะข้อความผิดพลาดคายสตริงแปลก ๆ สำหรับชื่อโฮสต์เซิร์ฟเวอร์ mongodb ของคุณ ..

นั่นคือข้อมูลที่เป็นประโยชน์ ด้วยวิธีการของฉันฉันคิดว่าฉันกำลังผสมข้อมูลบัญชีผู้ใช้ Mongolab กับข้อมูลผู้ใช้ MongoB จริงสำหรับฐานข้อมูล
Theja

อืมฉันกำลังพบปัญหาเดียวกัน ทุกอย่างทำงานบนเซิร์ฟเวอร์ทดสอบในพื้นที่ของฉันและฉันใช้ mongoHQ ดังนั้นจึงไม่จำเป็นต้องมีอินสแตนซ์ของ mongo ในพื้นที่สิ่งอื่น ๆ อาจผิดพลาดได้บ้าง
Karoh

ลืมเกี่ยวกับคำตอบ Pradeep ด้านล่างที่แก้ไขได้ :)
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

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

ทำเคล็ดลับ ระวังคุณไม่มี 'mongodb' ใน package.json ของคุณ! เพียงพังพอนและเชื่อมต่อ 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

ฉันมีปัญหานี้เพราะฉันรวมโฟลเดอร์node_modulesในที่เก็บ Git ของฉัน เมื่อฉันสร้างnode_modules อีกครั้งบนระบบอื่นมันทำงานได้ หนึ่งในนั้นกำลังใช้งาน Linux, อีกหนึ่ง OS X บางทีพวกเขาอาจมีสถาปัตยกรรมโปรเซสเซอร์ที่แตกต่างกันเช่นกัน


1

ฉันมีปัญหาเดียวกันกับอินสแตนซ์ EC2 ของฉัน ฉันคิดว่าสาเหตุแรกคือเพราะฉันมีอินสแตนซ์โหนดทำงานเมื่อฉันติดตั้ง Mongo ฉันหยุดบริการโหนดแล้วก็วิ่ง

sudo npm update 

ภายในโฟลเดอร์ระดับบนสุดของโครงการโหนดของฉัน ปัญหานี้ได้รับการแก้ไขและทุกอย่างก็เหมือนใหม่


1

ฉันพยายามเรียกใช้โหนดบนโฟลเดอร์ที่แชร์แบบเสมือนเครื่อง (คนพเนจร) นั่นเป็นปัญหา เครื่องโฮสต์ของฉันคือ Windows โหนดที่ติดตั้งบน Windows และทำงานเหมือนเครื่องราง ดังนั้นหากคุณใช้เครื่องเสมือนให้ลองเรียกใช้โหนดเซิร์ฟเวอร์บนเครื่องโฮสต์


1

ฉันมีปัญหาเดียวกันและไม่มีอะไรทำงานให้ฉันได้ ข้อผิดพลาดที่แสดงkerberosทำให้เกิดปัญหาและเป็นหนึ่งในการmongooseอ้างอิง เนื่องจากฉันใช้ Ubuntu ฉันคิดว่าอาจมีปัญหาสิทธิ์ใช้งานระหว่างแพ็คเกจที่ติดตั้งไว้ทั่วโลก - /usr/lib/node_modulesผ่านsudoและที่อยู่ในพื้นที่ผู้ใช้

ฉันติดตั้งไปmongooseทั่วโลก - sudoแน่นอนและทุกอย่างก็เริ่มทำงานอย่างที่คาดไว้

ป.ล. kerberosแพคเกจตอนนี้ยังติดตั้งทั่วโลกถัดไปmongooseแต่ฉันจำไม่ได้ว่าฉันตั้งใจทำมันหรือไม่ - ในขณะที่ฉันพยายามแก้ไขปัญหาหรือตอนนั้นมาจากจุดเริ่มต้น


1

ฉันกำลังทำงานกับนักเทียบท่ากับ 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


1

ฉันสามารถแก้ไขได้โดยการถอนการติดตั้งและติดตั้งแพ็คเกจพระใหม่ การติดตั้งครั้งแรกดูเหมือนจะมีการพึ่งพา 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

ขจัดปัญหาได้อย่างง่ายดายเพียงเพิ่มบรรทัดนี้ทั้งลองและจับเส้นทางบล็อก: 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(สำหรับการสร้าง addons ดั้งเดิม) และแม้กระทั่งการติดตั้ง windows SDK กับ visual studio - nodejs ไม่รู้จักโมดูลที่ประกอบbson.nodeเป็นโมดูล หลังจากติดตั้งปัญหาจะหายไป

อีกครั้งข้อผิดพลาดนี้หมายถึงอะไร

จริงๆแล้วมันไม่ใช่ข้อผิดพลาด คุณยังสามารถใช้พังพอน แต่ในกรณีนี้bsonคุณจะได้รับโมดูลjs-realizationที่ช้ากว่า

ฉันเห็นเคล็ดลับมากมายเช่น: "แก้ไขเส้นทางลึก ๆ ข้างใน node_modules ... " - ซึ่งไร้ประโยชน์โดยสิ้นเชิงเพราะมันไม่ได้แก้ปัญหา แต่เพิ่งปิดข้อความแสดงข้อผิดพลาด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.