首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getServerSideProps和mysql (RowDataPacket)

getServerSideProps和mysql (RowDataPacket)
EN

Stack Overflow用户
提问于 2020-04-13 13:03:41
回答 1查看 6.3K关注 0票数 5

我想用Next.js使用getServerSideProps方法(如在文档中解释 )进行服务器端呈现。

数据应该来自数据库,所以我使用的是mysql包。这将导致以下错误:

代码语言:javascript
复制
Error serializing `.assertions[0]` returned from `getServerSideProps` in "/assertion". Reason: `object` ("[object Object]") cannot be serialized as JSON. Please only return JSON serializable data types.

我认为原因是,因为来自mysqlmysql方法返回特殊对象(RowDataPacket)。我想传递给getServerSideProps的结果在记录时如下所示:

代码语言:javascript
复制
[ RowDataPacket { id: 1, title: 'Test' } ]

我可以通过用JSON.parse(JSON.stringify(result))包装结果来修复这个错误,但这对我来说似乎很奇怪。

所以,我的简单问题是:mysql.query如何正确地使用 getServerSideProps

或者这可能是Next.js应该解决的一个问题?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2020-07-01 06:42:46

我自己也遇到过这个问题。当我遇到这个问题时,它与MySQL无关。问题是getServerSideProps()希望您返回一个"JSON可序列化数据类型“,这基本上意味着一个简单的ol‘JavaScript对象(波霍)。

要修复它,只需创建一个新的POJO来返回。你可以走的几条路是:

代码语言:javascript
复制
// using spread operator to create new object
const plainData = {
  ...queryResult
}

// recreating the object with plucked props
const plainData = {
  title: queryResult.title,
  content: queryResult.content
}

// data conversion (wax-on wax-off)
const plainData = JSON.parse(JSON.stringify(queryResult))

您的特定数据在一个数组中,所以您最简单的解决方案是蜡上脱蜡,因为它将支持数组。否则你就得在上面画地图。

为什么这样?

您可以看到您的对象附加了RowDataPacket。这意味着它是RowDataPacket的一个实例,NextJS不允许任何实例,除非它严格等于Object.prototype (参见相关代码)

这似乎很奇怪,但他们已经描述了为什么需要在吉特布的问题上。TL;DR dates会引起客户端的问题,当页面发生水合物时。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61188494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档