代码之家  ›  专栏  ›  技术社区  ›  ElBeenMachine

在我的NextJS页面中导入Mongoose架构

  •  1
  • ElBeenMachine  · 技术社区  · 3 年前

    我对NextJS特别陌生,我想知道是否可以就我遇到的问题寻求一些帮助。

    我已经定义了两个Mongoose模式,并且在我的页面中使用一个模式已经有一段时间了,没有任何问题。然而,一旦我导入第二个模式,我的页面就拒绝呈现并附带错误。

    我导入哪种模式并不重要,但一旦导入第二个模式,我就会对第二个架构产生相同的错误。

    以下是每个模式:

    用户.js

    import mongoose from "mongoose";
    
    const UserSchema = new mongoose.Schema({}, { strict: false });
    
    export default mongoose.models.User || mongoose.model("User", UserSchema);
    

    相册.js

    import mongoose from "mongoose";
    
    const AlbumSchema = new mongoose.Schema({}, { strict: false });
    
    export default mongoose.models.Album || mongoose.model("Album", AlbumSchema);
    

    这是发生错误的页面。

    相册.js

    import Layout from "@/Components/Dashboard/DashLayout";
    
    import AlbumCard from "@/Components/Dashboard/Albums/AlbumCard";
    import AlbumSchema from "@/models/Album";
    import dbConnect from "@/utils/dcConnect";
    
    export default function DashAlbums({ albums }) {
        return (
            // Page content removed for import
        );
    }
    
    // Require authentication
    DashAlbums.auth = true;
    
    export async function getServerSideProps(context) {
        dbConnect();
        const albums = await AlbumSchema.find()
        const data = albums.map(album => {
            return { _id: album._id, name: album.name, cover: album.cover }
        });
    
        return { props: { albums: JSON.parse(JSON.stringify(data)) } }
    }
    

    有人能帮我找出哪里出了问题吗?

    我试过只导出模型,但NextJS不喜欢这样,而且我没有足够的知识来找出哪里出了问题。

    1 回复  |  直到 3 年前
        1
  •  2
  •   Yilmaz    3 年前

    我认为问题在于您无法将Mongoose模式代码导入到客户端组件中。

    您必须编写一个API路由,在API处理程序中编写此逻辑

    dbConnect();
    const albums = await AlbumSchema.find()
    const data = albums.map(album => {
        return { _id: album._id, name: album.name, cover: album.cover }
    });
    

    然后在 getServerSideProps 您向该api路径发出请求,并在内部返回正确的结果 props 对象