运行 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_modulesnpm cache cleannpm 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?

windows下通过Chocolatey安装node.js

windows下通过Chocolatey安装node.js

在函数节点内请求 Node-RED 版本

从 node.js 将图像上传到 s3 存储桶