mongodb - nextjs 导入但不调用函数抛出未找到模块:错误:无法解析“dns”
问题描述
我的项目(NextJS)运行良好,突然我遇到了这个问题ModuleNotFoundError
。特别是在 nextJs 的动态路由的情况下。
我看到的错误是:Module not found: Error: Can't resolve 'dns'
在导入 mongo的pages
目录中,它会抛出:pages/programs/[programtype]/[program].jsx
ModuleNotFoundError: Module not found: Error: Can't resolve 'dns' in 'node_modules/mongodb/lib'
完整的错误转储:
ModuleNotFoundError: Module not found: Error: Can't resolve 'dns' in '/project-path/node_modules/mongodb/lib'
at /project-path/node_modules/webpack/lib/Compilation.js:925:10
at /project-path/node_modules/webpack/lib/NormalModuleFactory.js:401:22
at /project-path/node_modules/webpack/lib/NormalModuleFactory.js:130:21
at /project-path/node_modules/webpack/lib/NormalModuleFactory.js:224:22
at /project-path/node_modules/neo-async/async.js:2830:7
at /project-path/node_modules/neo-async/async.js:6877:13
at /project-path/node_modules/webpack/lib/NormalModuleFactory.js:214:25
at /project-path/node_modules/enhanced-resolve/lib/Resolver.js:213:14
at /project-path/node_modules/enhanced-resolve/lib/Resolver.js:285:5
at eval (eval at create (/project-path/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:13:1)
at /project-path/node_modules/enhanced-resolve/lib/UnsafeCachePlugin.js:44:7
at /project-path/node_modules/enhanced-resolve/lib/Resolver.js:285:5
at eval (eval at create (/project-path/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:13:1)
at /project-path/node_modules/enhanced-resolve/lib/Resolver.js:285:5
at eval (eval at create (/project-path/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:25:1)
at /project-path/node_modules/enhanced-resolve/lib/DescriptionFilePlugin.js:67:43
解决方案
这是 nextjs 中服务器端代码的一个真正微妙的问题。
错误很明显:您正在尝试在客户端代码中执行服务器端代码(mongo 查询)。原因不明显,因为我确定您没有错误的代码...
经过一些调试后,我发现如果您导入 mongo 代码并且不使用它,则会引发此错误。请参阅下文以了解如何避免它。
好的和坏的例子
所以,这很好用:
import { findUsers } from '../lib/queries'
function Home({ users }) {
return (
<h1>Users list</h1>
//users.map and so on...
)
}
export async function getServerSideProps() {
const users = await findUsers()
return {
props: {
users: users
}
}
}
export default Home
虽然这会引发错误:
import { findUsers } from '../lib/queries'
function Home({ users }) {
return (
<h1>Users list</h1>
//users.map and so on...
)
}
export async function getServerSideProps() {
// call disabled to show the error
// const users = await findUsers()
return {
props: {
users: [] //returned an empty array to avoid other errors
}
}
}
export default Home
如何避免它
为避免此错误,如果您不在getServerSideProps
.
推荐阅读
- c++ - 将多个非原始递归调用转换为迭代解决方案
- javascript - 无法将子菜单的宽度作为父元素进行管理
- ios - 如何区分 iOS 应用上的 App Store、TestFlight 和 IPA 安装?
- pythonanywhere - pythonanwhere 新手:我没有看到 sqlite 选项
- rust - 非词法生存期借用检查器会过早释放锁吗?
- maven - 如何使用没有pom文件或settings.xml文件的maven直接将jar文件上传到nexus存储库?
- asp.net-core - 特定页面上的左侧导航栏利用每个页面的 MVC 模型数据
- python - 如果浏览器是无头的,脚本行为会发生变化
- machine-learning - 如何计算平均排名(MAR)?
- android - ListPreference 仅在第二次选择条目时更新其值