使用 axios 将突变发布到 graphql
Posted
技术标签:
【中文标题】使用 axios 将突变发布到 graphql【英文标题】:Post mutation to graphql with axios 【发布时间】:2019-01-08 20:08:27 【问题描述】:grahiql
中的此查询有效:
mutation
addSkill(id:"5",name:"javascript",level:1,type:"frontend")
status
id
name
level
type
什么相当于用axios
发帖?
我已经尝试过了,但一直收到400
请求响应。
"errors":["message":"语法错误:未终止的字符串。","locations":["line":3,"column":82]]
这是我尝试过的:
axios
.post(config.apiendpoint,
query: `
mutation addSkill($id:String!, $name:String!, $level:Float!, $type:String!)
mutation addSkill(id:$id, name:$name", level:$level, type:$type)
status
id
name
level
type
`,
variables:
id: String(id),
name: this.form.name,
level: this.form.level,
type: this.form.type,
,
)
.then(res => console.log(res))
.catch(err => console.log(err))
确定variables
中的值是正确的type
并且也不为空。
【问题讨论】:
【参考方案1】:我会避免像这样直接在查询中包含变量,因为这样你必须不断调整你的变量如何适应模板文字,比如字符串化和添加引号。
使用graphql
print
为你做这件事!
试试这个:
import axios from 'axios';
import print from 'graphql';
import gql from 'graphql-tag';
const ADD_SKILL = gql`
mutation addSkill($id:String!, $name:String!, $level:Float!, $type:String!)
addSkill(id:$id, name:$name, level:$level, type:$type)
status
id
name
level
type
`
axios.post(config.apiendpoint,
query: print(ADD_SKILL),
variables:
id: String(id),
name: this.form.name,
level: parseFloat(this.form.level),
type: this.form.type,
,
)
.then(res => console.log(res))
.catch(err => console.log(err))
【讨论】:
【参考方案2】:找到问题了。
-
删除多余的
mutation
R 删除"
后的额外$name
更新 - 更简洁的版本:
axios
.post(config.apiendpoint,
query: `mutation
addSkill(id:"$id", name:"$this.form.name", level:$parseFloat(this.form.level), type:"$this.form.type")
status
id
name
level
type
`,
).then().catch()
这是供参考的工作请求。
axios
.post(config.apiendpoint,
query: `
mutation addSkill($id:String!, $name:String!, $level:Float!, $type:String!)
addSkill(id:$id, name:$name, level:$level, type:$type)
status
id
name
level
type
`,
variables:
id: String(id),
name: this.form.name,
level: parseFloat(this.form.level),
type: this.form.type,
,
)
.then(res => console.log(res))
.catch(err => console.log(err))
【讨论】:
以上是关于使用 axios 将突变发布到 graphql的主要内容,如果未能解决你的问题,请参考以下文章
如何在 react 中使用 graphene-django 和 axios 将图像上传到我的服务器?
Vue.js:如何将特定对象中的布尔字段从 false 更改为 true @click 处于突变状态和带有动作 axios 的服务器?
React-query 和 Typescript - 如何正确输入突变结果?
在将 aws cdk 与 appsync 一起使用时,如何将突变添加到 graphql 架构并防止部署失败?