Strapi graphql mutation Syntax Error: Unterminated string
Strapi graphql mutation Syntax Error: Unterminated string
当我尝试使用 javascript strapi sdk 更新我的数据库时,我总是得到 Syntax Error: Unterminated string
。 this.chapter.content
是由 ckeditor 生成的 html 字符串。我如何转义此字符串以使用 graphql 更新我的数据库?
async updateChapter() {
const q = `
mutation {
updateChapter(input: {
where: {
id: "${this.$route.params.chapterId}"
},
data: {
content: "${this.chapter.content.replace(/[.*+?^${}()|[\]\]/g, '\$&').replace(/(?:\r\n|\r|\n)/g, '\n')}"
title: "${this.chapter.title}"
}
}) {
chapter{
title
id
content
}
}
}
`;
const res = await strapi.request("post", "/graphql", {
data: {
query: q
}
});
this.chapter = res.data.chapter;
}
从技术上讲,您可以使用 block string notation to get around this issue. However, you really should supply dynamic input values using variables 而不是字符串插值。通过这种方式,您可以轻松提供任何类型的值(字符串、数字、对象等),GraphQL 将相应地解析它们——包括带换行符的字符串。
const query = `
mutation MyMutation ($chapterId: ID!, $content: String!, $title: String!) {
updateChapter(input: {
where: {
id: $chapterId
},
data: {
content: $content
title: $title
}
}) {
chapter{
title
id
content
}
}
}
`
const variables = {
chapterId: '...',
content: '...',
title: '...',
}
const res = await strapi.request("post", "/graphql", {
data: {
query,
variables,
},
})
请注意,$chapterId
可能需要是 String!
类型,如果这是架构中所要求的。由于变量也可以是输入对象类型,而不是提供 3 个不同的变量,您还可以提供一个变量来传递给 input
参数:
const query = `
mutation MyMutation ($input: SomeInputObjectTypeHere!) {
updateChapter(input: $input) {
chapter{
title
id
content
}
}
}
`
const variables = {
input: {
where: {
id: '...',
},
data: {
content: '...',
title: '...',
},
},
}
同样,只需将 SomeInputObjectTypeHere
替换为架构中的适当类型即可。
当我尝试使用 javascript strapi sdk 更新我的数据库时,我总是得到 Syntax Error: Unterminated string
。 this.chapter.content
是由 ckeditor 生成的 html 字符串。我如何转义此字符串以使用 graphql 更新我的数据库?
async updateChapter() {
const q = `
mutation {
updateChapter(input: {
where: {
id: "${this.$route.params.chapterId}"
},
data: {
content: "${this.chapter.content.replace(/[.*+?^${}()|[\]\]/g, '\$&').replace(/(?:\r\n|\r|\n)/g, '\n')}"
title: "${this.chapter.title}"
}
}) {
chapter{
title
id
content
}
}
}
`;
const res = await strapi.request("post", "/graphql", {
data: {
query: q
}
});
this.chapter = res.data.chapter;
}
从技术上讲,您可以使用 block string notation to get around this issue. However, you really should supply dynamic input values using variables 而不是字符串插值。通过这种方式,您可以轻松提供任何类型的值(字符串、数字、对象等),GraphQL 将相应地解析它们——包括带换行符的字符串。
const query = `
mutation MyMutation ($chapterId: ID!, $content: String!, $title: String!) {
updateChapter(input: {
where: {
id: $chapterId
},
data: {
content: $content
title: $title
}
}) {
chapter{
title
id
content
}
}
}
`
const variables = {
chapterId: '...',
content: '...',
title: '...',
}
const res = await strapi.request("post", "/graphql", {
data: {
query,
variables,
},
})
请注意,$chapterId
可能需要是 String!
类型,如果这是架构中所要求的。由于变量也可以是输入对象类型,而不是提供 3 个不同的变量,您还可以提供一个变量来传递给 input
参数:
const query = `
mutation MyMutation ($input: SomeInputObjectTypeHere!) {
updateChapter(input: $input) {
chapter{
title
id
content
}
}
}
`
const variables = {
input: {
where: {
id: '...',
},
data: {
content: '...',
title: '...',
},
},
}
同样,只需将 SomeInputObjectTypeHere
替换为架构中的适当类型即可。