【发布时间】:2022-01-22 08:39:47
【问题描述】:
尝试发出 POST 请求,但出现错误,我无法自行解释/解决。以下是重新创建错误的步骤:
架构/模型 Template 有一个 Creative 和 Objective 列表,Objective 有一个描述,Creative 有几列 - 其中两列是字符串
model Template {
id Int @id @default(autoincrement())
title String @unique @default(cuid())
// Relation fields
objective Objective[]
creative Creative[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Objective {
id Int @id @default(autoincrement())
description String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Creative {
id Int @id @default(autoincrement())
owner_id String @default(cuid())
campaign_id String @default(cuid())
parent_c_id String @default(cuid())
brandLogo String
brandName String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
这是我的发布路线。描述是从数据体中解构出来的,而brandName和brandLogo也是从数据体中解构出来的。
//postRoute
router.post("/templates", async (req, res) => {
const { description } = req.body.data.objective;
const { brandName, brandLogo} = req.body.data.creative;
try {
const template = await prisma.template.create({
data: {
objective: {
create: description
},
creative: {
create: {
brandName,
brandLogo,
}
}
},
include: {
objective: true,
creative: true
}
});
res.status(200).json({ data: template, error: "", status: 200 });
} catch (error) {
console.log(error);
res.status(500).json({ data: {}, error: error, status: 500 });
}
});
这是我使用的测试数据
{
"data": {
"objective":{
"description": "This is a teesc for obj"
},
"creative": {
"brandName": "This is a test bndname",
"brandLogo": "www.test333.com/jpg"
}
}
}
最后,这是我得到的错误(部分)
{
query_validation_error: 'Unable to match input value to any allowed input type for the field. Parse errors: [Query parsing/validation error at `Mutation.createOneTemplate.data.TemplateCreateInput.objective.ObjectiveCreateNestedManyWithoutTemplateInput.create`: Unable to match input value to any allowed input type for the field. Parse errors: [Query parsing/validation error at `Mutation.createOneTemplate.data.TemplateCreateInput.objective.ObjectiveCreateNestedManyWithoutTemplateInput.create`: Value types mismatch. Have: List([String("This is a teesc for obj")]), want: Object(ObjectiveCreateWithoutTemplateInput), Query parsing/validation error at `Mutation.createOneTemplate.data.TemplateCreateInput.objective.ObjectiveCreateNestedManyWithoutTemplateInput.create`: Value types mismatch. Have: String("This is a teesc for obj"), want: Object(ObjectiveCreateWithoutTemplateInput), Query parsing/validation error at `Mutation.createOneTemplate.data.TemplateCreateInput.objective.ObjectiveCreateNestedManyWithoutTemplateInput.create`: Value types mismatch. Have: List([String("This is a teesc for obj")]), want: Object(ObjectiveUncheckedCreateWithoutTemplateInput), Query parsing/validation error at `Mutation.createOneTemplate.data.TemplateCreateInput.objective.ObjectiveCreateNestedManyWithoutTemplateInput.create`: Value types mismatch. Have: String("This is a teesc for obj"), want: Object(ObjectiveUncheckedCreateWithoutTemplateInput)], Query parsing/validation error at `Mutation.createOneTemplate.data.TemplateUncheckedCreateInput.objective.ObjectiveUncheckedCreateNestedManyWithoutTemplateInput.create`: Unable to match input value to any allowed input type for the field. Parse errors: [Query parsing/validation error at `Mutation.createOneTemplate.data.TemplateUncheckedCreateInput.objective.ObjectiveUncheckedCreateNestedManyWithoutTemplateInput.create`: Value types mismatch. Have: List([String("This is a teesc for obj")]), want: Object(ObjectiveCreateWithoutTemplateInput), Query parsing/validation error at `Mutation.createOneTemplate.data.TemplateUncheckedCreateInput.objective.ObjectiveUncheckedCreateNestedManyWithoutTemplateInput.create`: Value types mismatch. Have: String("This is a teesc for obj"), want: Object(ObjectiveCreateWithoutTemplateInput), Query parsing/validation error at `Mutation.createOneTemplate.data.TemplateUncheckedCreateInput.objective.ObjectiveUncheckedCreateNestedManyWithoutTemplateInput.create`: Value types mismatch. Have: List([String("This is a teesc for obj")]), want: Object(ObjectiveUncheckedCreateWithoutTemplateInput), Query parsing/validation error at `Mutation.createOneTemplate.data.TemplateUncheckedCreateInput.objective.ObjectiveUncheckedCreateNestedManyWithoutTemplateInput.create`: Value types mismatch. Have: String("This is a teesc for obj"), want: Object(ObjectiveUncheckedCreateWithoutTemplateInput)]]',
query_position: 'Mutation.createOneTemplate.data'
}
【问题讨论】:
-
您是否在上次修改 prisma 架构之后执行了 npx prisma generate??
-
是的,先生@luisbar。我认为问题是数据内的“目标”表``` const { description } = req.body.data.objective; ``` - 你能建议我如何在 POST 请求中包含目标表吗?删除目标使一切正常,但我想在提出请求时将其包括在内。
-
我认为错误在于您以错误的方式将描述传递给 create 属性,因为 create 属性需要 json 而不是字符串,请查看下面的示例:)