`object` ("[object Object]") 不能序列化为 JSON。请仅 return JSON 可序列化数据类型

`object` ("[object Object]") cannot be serialized as JSON. Please only return JSON serializable data types

我正在使用 NextJS,我之前调用了内部 /api 路由来使用 fetch() 获取此数据,但是,我意识到对于生产,它不会让你使用内部 api 在 getServerSideProps 内部调用 因此,我试图直接从 getServerSideProps.

调用我的 MongoDB 数据库

我的问题是我得到的错误是我作为 props 传递的 posts 数据不可序列化:“object ([object Object]” ) 无法序列化为 JSON。请仅 return JSON 可序列化数据类型。"

我不明白为什么,因为它的形式是:[object Object],[object Object],[object Object], etc. 它通过后应该起作用吗?

我的代码如下,供参考(代码下方有解释):

export async function getServerSideProps() {
    let returnID = null
    let posts = []
    let error = false
    try {
        const client = await MongoClient.connect(`mongodb+srv://MYUNIQUEMONDODBCONNECTIONDATA`);
        const db = client.db();
        const postsCollection = db.collection("posts");
        const result = await postsCollection.find({}).limit(10).toArray();
        console.log("RESULT: " + result)
        client.close();
        posts = result.map(r => {
            return {
                title: r.title,
                body: r.body,
                id: r._id,
            }
        });
        if (posts[posts.length - 1]?.id) { // make sure it's not undefined
            returnID = posts[posts.length - 1]?.id;
        }
    }
    catch (error) {
        error = true
    }
    return {
        props: {
            startingID: String(returnID),
            startingError: error,
            startingPosts: posts,
        }
    }
}

我从我的数据库收到的数据大致如下:[{"title":"1","body":"1","id":"6276767ca21167f5043d3dc8"},{"title":"2","body":"2","id":"6276767fa21167f5043d3dc9"},{"title":"3","body":"3","id":"62767682a21167f5043d3dca"}, etc.]这不符合我的posts我作为道具传递的格式吗?

console.log("RESULT: " + result) 打印:[object Object],[object Object],[object Object],[object Object], etc.

@jabaa 的回答:将 return 更改为此行:startingPosts: JSON.parse(JSON.stringify(posts))

return {
        props: {
            startingID: String(returnID),
            startingError: error,
            startingPosts: JSON.parse(JSON.stringify(posts)),
        }
    }

或者正如 Chris 提到的,您可以使用 .lean() 方法。