`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()
方法。
我正在使用 NextJS,我之前调用了内部 /api
路由来使用 fetch()
获取此数据,但是,我意识到对于生产,它不会让你使用内部 api 在 getServerSideProps
内部调用 因此,我试图直接从 getServerSideProps
.
我的问题是我得到的错误是我作为 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()
方法。