当我手动编写突变查询(在 graphql 插件中)时,它正在工作:
mutation {
createExam(input: {
data: {
name: "myName"
desription: "ggg"
questions: [{gf: "hello"}]
time: 2
subjects: ["5c468e2d61670b25b46ccdfe"]
}
}) {
exam {
name
desription
time
}
}
}
但是,如果我对其进行编码并传递完全相同的数组,我会得到完全相同的对象的数组,我会得到 [null, null]
let parsedQuestion = [{gf: "hello"}];
const response = await strapi.request('POST', '/graphql', {
data: {
query: `mutation {
createExam(input: {
data: {
name: "` + examInfo.newExamName + `"
desription: "` + examInfo.newExamDescription + `"
time: ` + Number(examInfo.newExamTime) + `,
questions: `+ parsedQuestion + `,
subjects: ["` + this.state.modalSubject._id + `"]
}
}) {
exam {
name
desription
time
questions
}
}
}`
}
怎么会这样?这可能是一个错误吗?我也尝试过 JSON.stringify 但后来出现错误,并且突变甚至没有通过
预先非常感谢
以这种方式构造查询字符串容易出错且危险;它会让您面临大量错误和众所周知的安全漏洞。 (如果什么newExamName
is My "super-duper" exam!!!
?)
GraphQL 提供变量作为一种更好的传递数据的方法。在您的情况下,由于您有一个复杂的结构化对象,因此将整个输入作为一个对象传递可能是最简单的(其他语法也是可能的)。我希望这看起来像:
const response = await strap.request('POST', '/graphql', {
data: {
query: `mutation CreateExam($input: CreateExamInput!) {
createExam(input: $input) {
exam { name, desription, time, questions }
}
}`,
variables: {
input: {
name: examInfo.newExamName,
desription: examInfo.newExamDescription,
time: Number(examInfo.newExamTime),
questions: [{gf: "hello"}],
subjects: [this.state.modalSubject._id]
}
}
}
});
现在,HTTP 客户端库可以负责从您的输入生成格式良好的 JSON,并且您无需执行棘手的字符串操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)