next.js"> next.js"> 使用 Mongoose 与 Next.js

Next.js 是一个流行的框架,用于使用 React 构建全栈应用程序。Mongoose 可以直接与 Next.js 配合使用。如果你想开始使用,请使用 Next.js 的官方 Mongoose 示例应用程序。此外,如果你将 Next.js 与 Vercel 无服务器函数 一起使用,请查看 Mongoose 的 AWS Lambda 文档

在使用 Next.js 时,有一些常见的错误需要注意。

TypeError: Cannot read properties of undefined (reading 'prototype')

你可以在你的 next.config.js 中添加以下内容来修复此问题

const nextConfig = {
  experimental: {
    esmExternals: "loose", // <-- add this
    serverComponentsExternalPackages: ["mongoose"] // <-- and this
  },
  // and the following to enable top-level await support for Webpack
  webpack: (config) => {
    config.experiments = {
      topLevelAwait: true
    };
    return config;
  },
}

此问题是由 MongoDB 的 bson 解析器中的此更改 引起的。MongoDB 的 bson 解析器在 ESM 模式下使用顶层 await 和动态导入来避免一些 Webpack 打包问题。而 Next.js 强制使用 ESM 模式。

Next.js Edge 运行时

Mongoose 目前不支持 Next.js Edge 运行时。虽然你可以在 Edge 运行时导入 Mongoose,但你将获得 Mongoose 的浏览器库。Mongoose 在 Edge 运行时无法连接到 MongoDB,因为 Edge 运行时目前不支持 Node.js net API,而 MongoDB Node 驱动程序使用该 API 连接到 MongoDB。