找不到模块:错误:使用 MongoDB 时无法解析“dns”

Posted

技术标签:

【中文标题】找不到模块:错误:使用 MongoDB 时无法解析“dns”【英文标题】:Module not found: Error: Can't resolve 'dns' when using MongoDB 【发布时间】:2019-02-21 12:21:08 【问题描述】:

我是 Reactjs、Nodejs 和 MongoDB 的新手。我目前正在尝试更改 Mediums 雪花工具以将用户分数存储在数据库中。我已经通过 npm 安装了 yarn、mongodb 和 mongodb-core。这是一个单页 Web 应用程序,我认为这给我带来了麻烦。我加了

var MongoClient = require('mongodb');

SnowflakeApp.js,遇到如下错误:

找不到模块:错误:无法解析“dns” '/home/mlAHO174/snowflake/node_modules/mongodb-core/lib'

我尝试用谷歌搜索这个错误,发现它可能是一系列问题。我不确定是因为 React 是前端并且我正在尝试更改后端,还是因为 mongoDB 安装不正确。我是新手,非常感谢您的帮助!

【问题讨论】:

我有同样的问题你找到解决办法了吗? 【参考方案1】:

对于在导入 clientPromise 时遇到此错误的任何人(如在 with-mongodb 模板中):

确保您位于 /pages/ 目录中!

不起作用在 /components 等其他目录中。

(你应该休息一下或喝杯咖啡......)

【讨论】:

【参考方案2】:

DNS 是 Node.JS 的核心模块。告诉人们他们需要通过 NPM 安装 DNS 最终会让他们拥有一个完全不同的模块来做其他事情。

https://nodejs.org/api/dns.html 与 https://www.npmjs.com/package/dns

这个错误很可能意味着您正在尝试从客户端执行需要在服务器端执行的操作。如果 MongoDB 模块找不到 DNS 组件,它在客户端运行。

MongoDB 必须在服务器上运行。为了从 React 动态访问数据,您需要使用 Express 或 Apollo 等设置 API。

更新: 一个很好的方法是使用 Azure Functions (TypeScript) 或 AWS (Lambda) 函数

【讨论】:

天啊,我是一名高级开发人员,我也做过同样愚蠢的事情。我以为你是疯子。大声笑【参考方案3】:

问题是您正试图从前端连接到数据库。如果这是可能的,那将打开一个充满安全问题的世界。您需要在后端设置数据库连接,然后让前端向后端发出请求以处理数据库。

【讨论】:

【参考方案4】:

我通过为代码的客户端部分安装和使用“bson”而不是“mongodb”解决了这个问题。 'bson' 有一点点 'mongodb' 有的东西,它可能有你正在寻找的东西。 'bson' 是为浏览器构建的。

在我的情况下,我需要浏览器中的“ObjectId”并将其从“bson”中提取出来,因为由于 OP 中描述的错误,我不想引用“mongodb”。

其他答案也是正确的,具体取决于您收到此错误的原因。

【讨论】:

【参考方案5】:

欢迎堆栈溢出。

您需要了解和学习一些网络应用程序的基础知识。在它们之间有前端、后端和一层,在后端和数据库之间有一层。前端包括react.jsangular.js 或浏览器上的任何其他内容。后端用于接受来自前端的请求,向前端提供 API 并从其他 API 或数据库中请求数据。数据库包括sqlno-sql

如果是 NPM 模块 mongodb-core.js,您将面临的错误。要么是没有正确安装,要么是使用了与你的 node 版本无法比较的错误版本的模块,或者是错误的 NPM 版本,或者使用了另一个未安装的 NPM 模块的模块。

您的问题是mongodb-core 使用了一个未安装的模块dns。尝试使用npm i dns 安装dns。或删除并再次安装mongodb-core

【讨论】:

感谢您的帮助。问题是我试图从前端使用它,而浏览器不知道 DNS 模块。我添加了一个后端来解决这个问题! 我正在使用 Next.js,并且我在我的服务器端 getServerSideProps 中使用导入连接到 MongoDB,但导入的文件包含 import MongoClient from 'mongodb';,这一切都搞砸了。我想知道如何使该导入有条件地仅在服务器端完成... 更新我自己:Next.js 的getServerSideProps 仅适用于pages,不适用于该目录之外的组件。我知道。我不应该工作超过午夜。 上述的 Dns 模块是 NodeJS 的核心模块。不要建议人们安装随机的东西

以上是关于找不到模块:错误:使用 MongoDB 时无法解析“dns”的主要内容,如果未能解决你的问题,请参考以下文章

找不到模块:错误:无法解析模块“fs”

找不到模块:错误:无法解析“加密”

找不到模块:错误:无法解析 webpack 中的“util”

找不到模块:错误:无法解析“./lib/axios”

找不到模块:错误:无法解析模块“组件/应用程序”。 webpack + reactjs 问题

找不到模块:错误:无法解析“croppie”