如何在graphql和strapi中传递JSON对象

2023-11-27

当我手动编写突变查询(在 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(使用前将#替换为@)

如何在graphql和strapi中传递JSON对象 的相关文章

随机推荐

  • 将 JPanel 置于 java 中其他对象的前面 (SWING)

    我想在应用程序处理时发出加载消息 所以我使用了JPanel over a JTree 但是当用户点击JPanel the JTree将被选择并且JPanel会去后面 隐藏之后JPanel 它再也不会出现 我不知道为什么 但它似乎永远不会走在
  • 是否可以基于 MySQL 中的列之一进行选择插入?

    以下插入是否基于 MySQL 中可能的列之一的选择 INSERT INTO student fees id name fees VALUES 1 SELECT name from students where student id 1 20
  • 如何在 AWS ElasticBeanstalk 和 Nginx 上使用 OAuth2 的 Spring Boot 应用程序上强制使用 SSL?

    我正在尝试使用参考文档强制使用 SSL https docs spring io spring boot docs current reference html howto security html howto enable https
  • 如何实现可取消的事件?

    在 System ComponentModel 中 有一个名为 CancelEventArgs 的类 其中包含可以在事件侦听器中设置的 Cancel 成员 MSDN 上的文档解释了如何使用它来取消侦听器内的事件 但如何使用它来实现我自己的可
  • 如何在 Windows 应用程序中启用常用控件

    我正在尝试在应用程序中启用通用控件 我按照中给出的步骤进行操作这篇 MSDN 文章 特别是该部分在仅使用标准扩展的应用程序中使用 ComCtl32 dll 版本 6 但我无法让它发挥作用 我做的唯一与本文不同的事情是我将清单信息添加到项目属
  • UIViewController viewDidLoad 宽度/高度不正确

    每个人都知道你不能相信 UIViewController init viewDidLoad 方法上的帧大小 这 void viewDidLoad NSLog d self view frame size width 在很多情况下会打印错误的
  • Spring Reactive 使用 ServerRequest 获取正文 JSONObject

    我是春季反应新手 我正在尝试使用邮递员从服务器获取请求信息 首先 postman使用post方法向服务器发送信息 其次 我们一直在服务器端编写相关代码并获取请求信息 在下面的代码片段中 我想知道是否可以获取ServerRequest函数的J
  • 隐藏命令行上的输入

    我知道像 Git 和其他这样的命令行界面能够隐藏用户的输入 对密码很有用 有没有办法在 Java 中以编程方式执行此操作 我正在从用户那里获取密码输入 我希望他们的输入 隐藏 在该特定行上 但不是所有行上 这是我的代码 尽管我怀疑它会有帮助
  • 如何使用高阶函数求对角线的总和?

    考虑以下二维数组 let array 11 2 4 4 5 6 10 8 12 我想要得到的是对角线的总和 As firstDiagnal 11 5 12 4 As secondDiagnal 4 5 10 19 我可以使用标准来实现它fo
  • 使用 Gunicorn 服务时 Flask 超时

    我有一个可以将音频文件转换为文本的应用程序 使用烧瓶和烧瓶插座 当我使用 python run py 运行它时 它工作得很好 但是当我使用 gunicorn k eventlet b 0 0 0 0 5000 run app 运行它时 它将
  • 如何使对话框(视图)在与主窗口相同的监视器上打开

    在具有多个显示器的 PC 中 假设您运行的应用程序除了主窗口 例如选项 之外还有第二个窗口 对话框 您希望它在与您的计算机相同的屏幕 显示器中打开MainWindow 如何强制这种行为 你基本上想要阻止你的场景MainWindow在一台显示
  • git 是否需要存在于服务器上才能使用它?

    当我开始使用 git 时 我的同事告诉我的最显着的好处之一是git 不需要出现在服务器上反对svn 但这真的是真的吗 在另一个线程我读到至少有一个git upload pack or git receive pack将是必要的 另一方面 我
  • 如何在使用 Chrome 浏览器的 Selenium Web 驱动程序执行自动化测试时绕过 NTLM 身份验证弹出窗口?

    我使用以下 python 代码绕过 NTLM 弹出窗口 chromedriver webdriver Chrome executable path chromedriver path chrome options options chrom
  • maxItemsInObjectGraph 被忽略

    我的 WCF 服务出现问题 该服务尝试序列化过多的数据 从跟踪中我收到一个错误 指出可以序列化或反序列化的最大元素数为 65536 请尝试增加 MaxItemsInObjectGraph 配额 所以我去修改了这个值 但它只是被忽略了 错误是
  • 创建自定义 PSObject PowerShell 2.0

    是否可以创建一个自定义对象 PSObject 并在程序执行之前和之后定义其属性 我们不断向该对象添加值数组 For e g c c New Object PSObject c Add Member type NoteProperty nam
  • emacs 字符串插入矩形数字向量?

    如何使用 emacs string insert rectangle 操作将数字向量添加到一系列行中 例如 我的 emacs 缓冲区中有一堆文本条目的缩短版本 element01 8 1111111110110100001000000011
  • C++、OpenCV:调整大小时断言失败

    作为一名 C 初学者 我目前面临着一个我无法解决的问题 即使代码非常简单 我一直在寻找answers互联网上到处都是 但没有一个适用于我的问题 我目前正在 VS2013 下使用 OpenCV 2 4 8 用 C 编写基本的 SVM 我能够处
  • OpenSSL::SSL::SSLContext SNI servername_cb 不工作

    正如中所引用的OpenSSL X509 证书显示错误域名的证书 我需要使用 TLSv1 或更高版本and 服务器名称指示扩大 即使ssl version and servername cb通过设置SSLContext 我仍然收到错误的证书m
  • 动态创建一个继承自ActiveRecord的类?

    我希望能够动态创建继承自 ActiveRecord 的类 以便在 Rails 应用程序外部编写脚本 我被困在这样的事情上 require active record def create arec table name Class new
  • 如何在graphql和strapi中传递JSON对象

    当我手动编写突变查询 在 graphql 插件中 时 它正在工作 mutation createExam input data name myName desription ggg questions gf hello time 2 sub