在next-js中激活topLevelAwait 13

iq0todco  于 2023-04-05  发布在  其他
关注(0)|答案(1)|浏览(128)

嗨,我想用mongoose连接我的nextjs应用程序到mongodb数据库,但当我键入await dbconnect()时,它返回一个错误,说我应该设置topLevelAwait=true,但在nextjs.config文件中没有这样的事情,即使我自己键入它也返回相同的错误
我试着在谷歌上搜索它,我发现了一个堆栈溢出问题,但它是为早期版本的next-js和它不工作的未来13
文件dbConect

import mongoose from "mongoose";

const dbConnect = async () => {
  try {
    const { connection } = mongoose.connect(
      "mongodb+srv://<username>:<password>@cluster0.slqa5pz.mongodb.net/?retryWrites=true&w=majority"
    );
    if (connection.readyState == 1) {
      console.log("database connected");
    }
  } catch (error) {
    console.log(error);
  }
};

export default dbConnect;

文件API

import dbConnect from "@/database/dbConnect"
export async function GET(request) {
    await dbConnect()
    return new Response('Hello, Next.js!')
}
q7solyqu

q7solyqu1#

要激活顶级await,您必须以这种方式配置tour next.config.js文件:

/** @type {import("next").NextConfig} */
module.exports = {
    experimental: { appDir: true, serverComponentsExternalPackages: ["mongoose"] },
    webpack(config) {
        config.experiments = { ...config.experiments, topLevelAwait: true };
        return config;
    }
};

由于你使用的是mongoose,我建议你添加serverComponentsExternalPackages选项。在未来的nextjs更新中可能不需要,但到目前为止,我必须添加它才能让我的项目正常工作。

相关问题