Strapi graphql mutation Syntax Error: Unterminated string

Strapi graphql mutation Syntax Error: Unterminated string

当我尝试使用 javascript strapi sdk 更新我的数据库时,我总是得到 Syntax Error: Unterminated stringthis.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 替换为架构中的适当类型即可。