Estoy usando NextJS y anteriormente llamé a una ruta interna /api para obtener estos datos usando fetch() , sin embargo, me di cuenta de que para producción, no le permitirá usar llamadas api internas dentro getServerSideProps Por lo tanto, estoy tratando de llamar a mi Base de datos MongoDB directamente desde getServerSideProps .
Mi problema es que recibo el error de que los datos de mis posts que paso como props no son serializables: " objeto ("[objeto Objeto]") no se puede serializar como JSON. Solo devuelva tipos de datos serializables JSON".
No entiendo por qué, ya que tiene la forma de: [object Object],[object Object],[object Object], etc. ¿Qué debería funcionar cuando se pasa?
Mi código está a continuación como referencia (explicaciones debajo del código):
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, } } } Los datos que recibo de mi base de datos son más o menos los siguientes: [{"title":"1","body":"1","id":"6276767ca21167f5043d3dc8"},{"title":"2","body":"2","id":"6276767fa21167f5043d3dc9"},{"title":"3","body":"3","id":"62767682a21167f5043d3dca"}, etc.] ¿Esto no coincide con el formato de mis posts que paso como accesorios?
La línea console.log("RESULT: " + result) imprime: [object Object],[object Object],[object Object],[object Object], etc.
RESPUESTA de @jabaa: cambie el regreso a esta línea: startingPosts: JSON.parse(JSON.stringify(posts))
return { props: { startingID: String(returnID), startingError: error, startingPosts: JSON.parse(JSON.stringify(posts)), } } o Como Chris mencionó, puede usar el método .lean() .