ModuleNotFoundError:找不到模块:错误:无法解析“node_modules/mongodb/lib”中的“dns”

Pri*_*ata 5 mongodb npm node-mongodb-native next.js

我的项目(NextJS)运行良好,突然我遇到了 ModuleNotFoundError 问题。特别是在 nextJs 的动态路由的情况下。

我的页面结构不工作 pages/programs/[programtype]/[program].jsx

"mongodb": "^3.5.9"

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
Run Code Online (Sandbox Code Playgroud)

lif*_*foo 14

这是 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
Run Code Online (Sandbox Code Playgroud)

虽然这会抛出错误:

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
Run Code Online (Sandbox Code Playgroud)

如何避免

为了避免这种错误,只是删除任何服务器端代码导入你的组件,如果你不使用getServerSideProps

  • 我已经被这个咬过好几次了。错误消息根本没有帮助。 (3认同)