Этот запрос в grahiql работает:
mutation {
addSkill(id:"5",name:"Javascript",level:1,type:"frontend") {
status
id
name
level
type
}
}
Что эквивалентно публикации с axios?
Я пробовал это, но получаю ответ на запрос 400.
{"errors":[{"message":"Syntax Error: Unterminated string.","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.info(res))
.catch(err => console.info(err))
Я уверен, что значения в variables соответствуют правильному type и тоже не пустые.


Нашел проблему.
mutation" после $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.info(res))
.catch(err => console.info(err))
Я бы не стал включать переменные непосредственно в запрос, подобный этому, потому что таким образом вам нужно постоянно настраивать то, как ваши переменные вписываются в литерал шаблона, например, структурировать материал и добавлять кавычки.
Используйте graphqlprint, чтобы сделать это за вас!
Попробуй это:
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.info(res))
.catch(err => console.info(err))