Prisma 日期对象未通过 Zod 日期验证

问题描述 投票:0回答:1

我有以下代码:

export const getSales = procedure.query(async ({ ctx }) => {
  const sales = await ctx.prisma.sale.findMany({
    where: { deletedAt: null },
  })

  return salesSelectOutput.parse(sales)
})

销售选择输出

saleSelectOutput
是通过更改/省略
saleSchema
中的一些值进行的 zod 验证,也用于创建
createSaleInput

salesSelectOutput
只是
saleSelectOutput
的数组版本。

问题

除了

sales.[n].dateOfSale

上的一次验证失败之外,此代码运行没有任何问题
"code": "invalid_type",
"expected": "date",
"received": "object",
"path": [
  "dateOfSale"
],
"message": "please input a proper date"

我尝试检查 dateOfSale 是什么,它是一个类型

object
,具有以下值:

2024-02-28T08:09:50.339Z

我在其他位置也有类似的问题,因此只能修复这种情况的方案(例如以下内容)不是一个选项

  return salesSelectOutput.parse({...sales, dateOfSale: new Date(dateOfSale)})

问题

让 zod 接受 prisma 的对象作为日期或在验证之前更改值的最佳方法是什么?

date types prisma zod
1个回答
0
投票

在 prisma 的架构文件中使用

DateTime
字段并在 zod 架构中使用以下内容。

zodDateField: z.string().transform((val) => new Date(val))
© www.soinside.com 2019 - 2024. All rights reserved.