运行 mongodb-backed node app 时无法加载 C++ bson 扩展,使用纯 JS 版本错误
Posted
技术标签:
【中文标题】运行 mongodb-backed node app 时无法加载 C++ bson 扩展,使用纯 JS 版本错误【英文标题】:Failed to load C++ bson extension, using pure JS version error when running mongodb-backed node app 【发布时间】:2015-08-09 18:47:17 【问题描述】:每次运行需要mongodb
的节点应用程序时,都会出现上述错误。我所有的应用程序都像以前一样运行良好,虽然纯 JS 版本显然更慢。
我已经搜索了 *** 和 github 问题页面来尝试解决我的问题,但我尝试过的建议都没有奏效。
我过去曾顺利运行过支持 mongodb 的节点应用程序。但是,我最近在一周前使用AppCleaner 卸载了 Xcode(扫描并删除剩余文件),这可能是罪魁祸首。
我尝试解决问题(我在每个步骤后运行了一个示例节点应用程序以检查它是否有效)
注意:xcode-select --install
表示已经安装
npm update
rm -rf node_modules
, npm cache clean
, npm install
sudo xcode-select -switch /Library/Developer/CommandLineTools
npm install -g node-gyp
后跟 sudo node-gyp rebuild
在我的应用程序的 node_modules 中的 mongodb 目录内的 bson 目录内。这会灾难性地失败,这里显示http://pastebin.ca/3011137
再次安装 Xcode
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
这是我的应用程序的 package.json
"name": "hw1-3",
"version": "0.0.0",
"description": "Homework 1.3",
"main": "app.js",
"dependencies":
"consolidate": "~0.9.1",
"crypto": "~0.0.3",
"express": "3.x",
"mongodb": "~1.3.11",
"swig": "~0.14.0"
,
"author": "You",
"license": "BSD",
"private": true
运行rm -rf node_modules
、npm cache clean
、npm install
后的npm输出
npm WARN deprecated swig@0.14.0: v1.0.0 is a complete rewrite of Swig from the ground up. Previous versions are no longer supported
> kerberos@0.0.3 install /Users/prashanthcr/Programming/M101JS/week_1_introduction/homework_1_3/hw1-3/hw1-3/node_modules/mongodb/node_modules/kerberos
> (node-gyp rebuild 2> builderror.log) || (exit 0)
CXX(target) Release/obj.target/kerberos/lib/kerberos.o
> bson@0.2.5 install /Users/prashanthcr/Programming/M101JS/week_1_introduction/homework_1_3/hw1-3/hw1-3/node_modules/mongodb/node_modules/bson
> (node-gyp rebuild 2> builderror.log) || (exit 0)
CXX(target) Release/obj.target/bson/ext/bson.o
consolidate@0.9.1 node_modules/consolidate
crypto@0.0.3 node_modules/crypto
swig@0.14.0 node_modules/swig
└── underscore@1.8.3
express@3.20.3 node_modules/express
├── basic-auth@1.0.0
├── merge-descriptors@1.0.0
├── utils-merge@1.0.0
├── cookie-signature@1.0.6
├── methods@1.1.1
├── cookie@0.1.2
├── escape-html@1.0.1
├── fresh@0.2.4
├── range-parser@1.0.2
├── content-type@1.0.1
├── vary@1.0.0
├── parseurl@1.3.0
├── content-disposition@0.5.0
├── commander@2.6.0
├── depd@1.0.1
├── mkdirp@0.5.0 (minimist@0.0.8)
├── proxy-addr@1.0.8 (forwarded@0.1.0, ipaddr.js@1.0.1)
├── debug@2.2.0 (ms@0.7.1)
├── etag@1.5.1 (crc@3.2.1)
├── send@0.12.3 (destroy@1.0.3, ms@0.7.1, mime@1.3.4, etag@1.6.0, on-finished@2.2.1)
└── connect@2.29.2 (pause@0.0.1, response-time@2.3.1, vhost@3.0.0, on-headers@1.0.0, basic-auth-connect@1.0.0, bytes@1.0.0, method-override@2.3.3, serve-static@1.9.3, connect-timeout@1.6.2, qs@2.4.2, cookie-parser@1.3.5, finalhandler@0.3.6, http-errors@1.3.1, morgan@1.5.3, serve-favicon@2.2.1, express-session@1.10.4, body-parser@1.12.4, multiparty@3.3.2, type-is@1.6.2, csurf@1.7.0, compression@1.4.4, errorhandler@1.3.6, serve-index@1.6.4)
mongodb@1.3.23 node_modules/mongodb
├── kerberos@0.0.3
└── bson@0.2.5
在 Mac OS X 10.10.3 上运行
【问题讨论】:
您应该发布从 npm 获得的实际日志。 我按说明添加了 npm 输出。如果那不是您要查找的日志,我很抱歉,请告诉我在哪里可以找到它 您发布的日志未显示您在问题中描述的错误。在我看来它编译成功了。 从哪里获得我需要的日志?运行 app.js 时得到的唯一输出是Failed to load c++ bson extension, using pure JS version
,以及我输入的 console.log()
语句。
【参考方案1】:
您依赖于旧版本的 mongodb
,而后者又依赖于旧版本的 bson
,它可能缺乏(完全)对节点 v0.12+ 的支持。
在撰写本文时,mongodb
的当前版本为 2.0.33。尝试改用它,它应该可以正常工作。
顺便说一句,你所依赖的 Express 版本 (3.x) 也太旧了,4.x 已经发布了很长一段时间了。
【讨论】:
我正在上 MongoDB 的 M101JS 课程,不幸的是,如果我使用最新的,他们的应用程序会崩溃,所以我将不得不忍受这个:(。希望他们能够及时更新他们的课件 好吧,至少您的依赖项应该仍然有效,只是bson
将使用较慢的 (js) 解析器。以上是关于运行 mongodb-backed node app 时无法加载 C++ bson 扩展,使用纯 JS 版本错误的主要内容,如果未能解决你的问题,请参考以下文章
如何解决:当前平台上递归监视功能不可用,正在用于运行 Node.js
如何在无需全局安装 ts-node 或 npx 的情况下完全运行 nodemon + ts-node + typescript?