我有以下代码:
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 的对象作为日期或在验证之前更改值的最佳方法是什么?
在 prisma 的架构文件中使用
DateTime
字段并在 zod 架构中使用以下内容。
zodDateField: z.string().transform((val) => new Date(val))