用Javascript获取发送的GraphQL引用参数

时间:2019-05-17 12:08:41

标签: javascript graphql

我正在尝试使用Javascript查询Graphql端点,并使用此javascript方法创建查询:

module.exports = (uid) =>
`{
    rich_text_data_for_uid(uid:"${uid}")
        {
            record_uid
            field_name
            row_number
            value
        }
}`.replace(/\n/g, " ");

这是资源管理器中的有效查询:

{
    rich_text_data_for_uid(uid:"31D2A75A3254D5EA852581D7006C2BA5")
        {
            record_uid
            field_name
            row_number
            value
        }
}

请注意,下面的JSON的格式设置为可读性强,但发送到服务器时(通过上面的replace方法调用)没有换行符。

这是作为我的fetch请求的正文发送的,并且引起了问题(我怀疑是因为引用)

{ "query": "{
    rich_text_data_for_uid(uid:"31D2A75A3254D5EA852581D7006C2BA5")
        {
            record_uid
            field_name
            row_number
            value
        }
}"

我也尝试过转义引号,并将其作为有效载荷发送:

{ "query": "{
    rich_text_data_for_uid(uid:\"31D2A75A3254D5EA852581D7006C2BA5\")
        {
            record_uid
            field_name
            row_number
            value
        }
}"

我的Graphql响应始终为400:

  

POST正文发送了无效的JSON。

编辑:当我尝试使用变量时,也会出现错误:

    {"query":
"{ rich_text_data_for_uid(uid:$uid) {record_uid field_name row_number value } }",
"variables":{"uid":"31D2A75A3254D5EA852581D7006C2BA5"}}

上面说

  
    

未定义变量“ $ uid”。

  

如何发送以将String参数传递给Graphql?

1 个答案:

答案 0 :(得分:0)

代替删除问题,我将发布我得出的答案:

这是使其有效的方法-我们必须将查询字符串包装在描述我们要传递的变量的参数化块中:

module.exports = (uid) =>
`query rd($uid: String) {
    rich_text_data_for_uid(uid:\$uid)
        {
            record_uid
            field_name
            row_number
            pardef
            value
        }
}`.replace(/\n/g, " ");

与该JSON数据结合使用,效果很好:

const query = JSON.stringify({"query": richTextQueryForUid(uid), "variables": {"uid": uid}})