mongodb 在使用mongoose时如何消除此错误?

6yjfywim  于 2023-03-29  发布在  Go
关注(0)|答案(1)|浏览(172)

我正在构建一个简单的博客应用程序来学习使用next和mongoose。现在我收到错误“TypeError:mongoose__WEBPACK_IMPORTED_MODULE_0__.models is undefined”。
我有一个博客帖子的模型。postModel.js看起来像这样:

import { Schema, models, model } from "mongoose"

const postSchema = new Schema({
    title: { type: String, required: true },
    content: { type: String, required: true },
    author: { type: String, required: true },
    image: { type: String },
})

const Post = models.Post || model("Post", postSchema)

export default Post

我的index.js看起来像这样:

import { Header } from "../components/Header"
import { BlogPosts } from "../components/BlogPosts"
import BlogPostForm from "../components/BlogPostForm"
import { useUser } from "@auth0/nextjs-auth0/client"
import Post from "../models/postModel"
import connectMongo from "../utils/connectMongo"

export default function Home({ posts }) {
    const { user } = useUser()

    

    return (
        <div className="container">
            <Header />
            <div className="blog">
                <BlogPosts posts={posts} />
                {user && <BlogPostForm />}
            </div>
        </div>
    )
}

export const getServerSideProps = async () => {
    try {
        console.log("CONNECTING SERVERSIDE")
        await connectMongo()
        console.log("CONNECTED SERVERSIDE")
        const posts = await Post.find()
        console.log("TEEEST")
        // Post.watch().on("change", () => console.log("NU JÄVLAR!!"))
        console.log("TEEEST")

        return {
            props: {
                posts: JSON.parse(JSON.stringify(posts)),
            },
        }
    } catch (error) {
        console.log(error)
    }
}

像这样,应用程序可以正常工作。但是,我想监听mongodb中的更改,并在我的博客中重新呈现blogpost组件,以便当我添加帖子时,帖子列表立即重新呈现。
当我像这样添加useEffect时:

useEffect(() => {
        Post.watch().on("change", () => {
            console.log("UPDATE")
        })
    }, [])

我只是得到错误“TypeError:mongoose__WEBPACK_IMPORTED_MODULE_0__.models is undefined”。
这个错误在构建应用程序时不时地困扰着我-似乎导入或导出有什么问题-但在这种情况下,我不明白为什么当我尝试添加useEffect时突然给我这个错误,而不是之前?
我已经尝试来回更改导入和导出,但没有任何工作。请帮助!
我相信这与我没有连接到mongodb有关,我已经试着来回改变我的导出和导入,我已经确保我没有在任何不使用Post的文件中导入Post(这导致了同样的错误之前).我也问ChatGPT的帮助,但无济于事.我已经按照教程,我的代码(至少在postModel.js中)是相同的,所以这个文件应该没有任何问题。
编辑:
这是我的connectDB文件:

import mongoose from "mongoose"
mongoose.set("strictQuery", true)

const connectMongo = async () => mongoose.connect(process.env.MONGO_URI)

export default connectMongo
zxlwwiss

zxlwwiss1#

有时候,错误消息可能会引起误解。一种看待问题的方法是因为mongoose中的对象(或引用)没有被导入;import mongoose from "mongoose",因此未定义。
另一种看待这个问题或真相的方式是......这也是一个问题,因为 Mongoose 和webpack是如何相互作用的。
当你的代码被执行时,你会在这里遇到错误mongoose.connect(process.env.MONGO_URI),因为“mongoose”是一个未定义的对象。
您可以通过简单地将mongoose版本更改为旧版本来修复该问题。
友情提示,即使你是在“全栈”框架下开发,也要尽量将前端和后端应用程序分开,这样可以避免将来出现问题。
供参考:https://github.com/Automattic/mongoose/issues/5610 .

相关问题