MongoDB NodeJS驱动的browserify兼容性(调试帮助)

Posted

技术标签:

【中文标题】MongoDB NodeJS驱动的browserify兼容性(调试帮助)【英文标题】:MongoDB NodeJS driver's browserify compatibility (debugging help) 【发布时间】:2016-08-22 12:18:00 【问题描述】:

试图找出我无法浏览 mongodb 本机 nodejs 驱动程序的问题。我假设我的设置中有问题,因为我尝试使用谷歌搜索是否存在任何已知的当前与 MongoDB NodeJS 驱动程序和 browserify 的兼容性问题,但在尝试了几天后没有得出任何结论;(

在 browserify 上运行我的代码后,我得到了一个

TypeError: require(...).native is not a function

我在驱动程序的 github 存储库中读到该驱动程序依赖于一些本机功能以及 kerberos 和 node-gyp。我在我的机器上安装了驱动程序,npm install mongodb --save 没有任何问题,所以我不知道是否可能是这种情况。

我已经没有调试的想法了,所以我转向了有福的 SO 社区 :)

我正在使用无服务器框架为 AWS Lambda 进行开发(所以我担心驱动程序是否真的会在 Lambda 实例上运行,因为驱动程序需要一些本机功能......)。这是我的测试代码

var MongoClient = require('mongodb').MongoClient;
var x = "Hello NodeJS";

console.log(x);

MongoClient.connect("mongodb://localhost:27017/test", (err, db) => 
  console.log("Error null? " + (err == null ? "YES" : "NO"));
  console.log("DB null? " + (db == null ? "YES" : "NO"));
);

我在原始代码中使用了一些 ES6 语法,例如 import 和 let bc,我还使用 babelify 对其进行了转换,但已将其删除,所以只是简单的 browserify 会产生一些问题

我是这样跑的

browserify simple.js -o browserified.js

如果有人能阐明这一点,我将不胜感激。

谢谢

【问题讨论】:

可以直接用babel吗? Browserify 似乎是一个错误的工具。你也许可以让它工作,但这并不是 browserify 的设计初衷。 我想过,好主意,但我正在使用无服务器框架来组织代码并将其部署到 AWS Lambda,它们具有与部署过程挂钩的插件概念。他们有这个优化器插件,它可以浏览并使用 babel 作为 browserify 的插件,所以我试图模仿相同的方法,因为我将在整个过程中使用它。我找不到另一个只有 babel 的插件。他们现在有一个我正在研究的 babel-runtime,我也许可以使用它。但是人们不能将mongo驱动程序与browserify一起使用吗?感谢您的评论 说实话,我不确定。我几乎可以肯定他们不能在浏览器中使用它,但您似乎正在使用 browserify 来转换和在节点中使用。我不确定那里会发生什么样的恶作剧,但我知道 browserify tries to shim some stuff,但它不可能全部获得,因为节点可以做浏览器不能做的事情(与 fs 等交互)。如果 mongodb 使用其中任何一个,我真的知道 browserify 会尝试对他们做什么。 @dvlsg 是的,我正在尝试在节点中使用它。我相信他们只是使用 browserify 来提高性能。我将尝试仅使用 Babel 修改或创建另一个插件,看看我是否可以通过它。再次感谢... 【参考方案1】:

我在 MongoDB JIRA 服务器上创建了一个问题,并确认驱动程序截至今天未在浏览器中运行。当然,我并没有尝试在浏览器中运行它,而是在 Node 中运行它,但正如我的朋友 @dvlsg 在我的问题的 cmets 中指出的那样,浏览器化填充程序可能会为正确实现 MongoDB 驱动程序提供一些重要的东西。因此,如果您从今天开始就在外面拉扯头发,请尝试一种解决方法,其中不包括将 mongodb 驱动程序与 browserify 捆绑在一起。

驱动程序维护人员确认他正在开发一个可以在浏览器中运行的版本,它可能会按照我需要的方式运行,但即使是 alpha 版本也没有准备好,希望你以后阅读这篇文章。 .

【讨论】:

这方面有什么更新吗?驱动维护者的线程在哪里? @ericsoco 这是线程。 jira.mongodb.org/browse/NODE-698希望对您有所帮助...

以上是关于MongoDB NodeJS驱动的browserify兼容性(调试帮助)的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS 本机驱动程序上的示例 MongoDB 错误是啥样的?

从 NodeJS 原生 mongodb 驱动程序获取 MongoDB 操作 id 以用于 db.killOp

MongoDB NodeJS驱动的browserify兼容性(调试帮助)

mongodb nodejs原生驱动是不是关闭连接

mongodb nodejs原生驱动是不是关闭连接

如何检查MongoDB本机nodejs驱动程序中是不是存在集合?