mysql Prisma:类型错误:不知道如何序列化BigInt

pzfprimi  于 2023-04-10  发布在  Mysql
关注(0)|答案(1)|浏览(445)

我试图从数据库中获取数据,这是我的prisma模型:

model instant_reports {
  id         BigInt    @id @default(autoincrement()) @db.UnsignedBigInt
  created_at DateTime?
  updated_at DateTime?
  deleted_at DateTime?
  timestamp  BigInt?
  client_id  BigInt?
  uniq_users BigInt?
}

所以当我像这样获取数据时

prismaService.instant_reports.findMany({
      skip: 0,
      take: 30,
    });

它抛出错误
TypeError:不知道如何在JSON.stringify()序列化BigInt
我甚至不知道如何处理它,有没有办法改变findMany方法中的数据处理程序?
如果instant_reports中没有行,那么它会给我一个空数组而不会出错,所以问题出在BigInt类型的数据中。

bihw5rsg

bihw5rsg1#

这个错误是因为JavaScript的JSON.stringify不知道如何处理BigInt类型。所以我应该在将BigInt字段作为响应发送给客户端之前为它们创建一个自定义序列化器。像这样:

function bigIntToString(value) {
  const MAX_SAFE_INTEGER = 2 ** 53 - 1;
  return value <= MAX_SAFE_INTEGER ? Number(value) : value.toString();
}

function serializeInstantReports(instantReports) {
  return instantReports.map(report => {
    const newReport = { ...report };
    if (typeof report.id === 'bigint') newReport.id = bigIntToString(report.id);
    // ...
    // such convirtions for other BigInt fields
    // ...
    return newReport;
  });
}

然后从fetch函数返回此serializeInstantReports的结果。

相关问题