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