OverwriteModelError:编译后无法覆盖 `Clue` 模型。猫鼬 NextJS

问题描述 投票:0回答:1

我正在尝试使用 NextJS 构建一个简单的 Web 应用程序,并尝试将 Mongoose 纳入我的数据库操作。

这是我看到的错误:

我已经阅读了无数 StackOverflow 帖子,但他们的解决方案似乎都不起作用。

所以我的 NextJS 项目的结构是这样的:

我有我的

app/page.tsx
。由于我有很多依赖于窗口大小的组件,因此我使用
App
 渲染 
{ssr: false}

组件
'use client';

import React from 'react';
import { ChakraProvider } from "@chakra-ui/react";
import dynamic from 'next/dynamic';

const App = dynamic(() => import('../components/App'), { ssr: false })

export default function Home() {
  return (
    <main>
      <ChakraProvider>
          <App />
      </ChakraProvider>
    </main>
  );
}

我的应用程序中的一个子组件是

components/Game.tsx
,如下所示。 (这里的
Clue
是基本类型)。

import { Clue } from "../types";
import { getDailyClue } from "../api/ClueAPI";
import { useEffect, useState } from "react";

const Game = (props: {color: string}) => {

    const [clue, setClue] = useState<Clue>();

    useEffect(() => {
        getDailyClue().then((clue) => setClue(clue));
        console.log(clue);
    }, [clue]);

    return (
        <> Stuff </>
    );
}

export default Game;

有趣的部分是,

getDailyClue
是我需要连接到我的 MongoDB 数据库并进行查询的地方。

第一个是

api/DBApi.ts
,其中包含连接到 Mongo 的代码。

'use server';

import mongoose from 'mongoose';

export const connectDB = async () => {
  try {
    await mongoose.connect(process.env.MONGO_URI);
    console.log('Connected to MongoDB');
  } catch (error) {
    console.error(error);
  }
}

我有我的

api/clue.ts
,它可以创建模型。

import mongoose from 'mongoose';

const clueSchema = new mongoose.Schema({
    rowid: Number,
    clue: String,
    ...
});

export default mongoose.models.ClueModel || mongoose.model('Clue', clueSchema);

最后,我有在

api/ClueAPI.ts

中获取数据的代码
'use server';

import { Clue } from '../types';
import { connectDB } from './DBAPI';
import ClueModel from './clue';

export const getDailyClue = async (): Promise<Clue> => {
    await connectDB();
    const randomClue = await ClueModel.find([
        {
            $match: {
                date_used: {
                    $lte: new Date('2000-01-01'),
                }
            }
        }
    ]);
    return randomClue[0];

};

我的理解是,当我尝试从猫鼬获取数据时发生错误。我对 NextJS 相当陌生,并试图通过我正在构建的这个小项目奠定基础。

非常感谢任何帮助,谢谢!

reactjs mongoose next.js
1个回答
0
投票

我尝试了更多的东西,看起来我的

api/clue.ts
中的这些改变起作用了:

import mongoose from 'mongoose';

const clueSchema = new mongoose.Schema({
    rowid: Number,
    clue: String,
    ...
});

const getModel = () => {
    return mongoose.model('Clue', clueSchema);
}

const ClueModel = mongoose.models.Clue || getModel();

export default ClueModel;

我想主要的修复方法是使用

mongoose.models.Clue
而不是
mongoose.models.ClueModel.

© www.soinside.com 2019 - 2024. All rights reserved.