【问题标题】:Variable "$charactersID" of required type "ID!" was not provided., Location: [object Object], Path: undefined所需类型“ID!”的变量“$charactersID”未提供。,位置:[object Object],路径:未定义
【发布时间】:2020-09-15 03:52:50
【问题描述】:

我正在使用 apollo、graphql、react、mongo 并尝试使用名称和电子邮件在客户端创建一个新用户并将其发布在主页上,但是当我点击提交按钮时出现此错误 - 变量所需类型“ID!”的“$charactersID”未提供。,位置:[object Object],路径:未定义。我尝试为 charactersID 设置一个变量,但不确定我是否正确

import React, {Component} from 'react'
import {Add_User} from '../gql/mutations'
import {Mutation} from 'react-apollo'

class Signup extends Component{
render(){
    let name, email;
    return(
      <Mutation mutation={Add_User} onCompleted={() => this.props.history.push('/')}>
          {(addUser, {loading, error}) => (
              <div>
                  Create new user
                <form onSubmit= {e=>{e.preventDefault(); 
                    addUser({variables: {name: name.value, email: email.value }})
                    name.value = ""
                    email.value = ""
                    }}>
                 <input type="text" name="name" ref={node => { name = node}} placeholder 
    ="NAME"/> 
                 <input type="text" name="email" ref={node => { email = node}} placeholder 
    ="EMAIL"/> 
                 <input type="submit" value="Submit" />
              </form>

             {loading && <p>Loading...</p>}
             {error && <p>Error : Please try again </p>}
              </div>

          )}
      </Mutation>
    )
}
}

export default Signup;

突变

import gql from 'graphql-tag'

export const Add_User = gql`
mutation addUser($name: String!, $email: String, $description: String, $totalwins: Int, 
$charactersID: ID!){
addUser(name: $name, email: $email, description: $description, totalwins: $totalwins, 
charactersID: $charactersID){
    _id
    email
    name
    description
    totalwins
    charactersID{
        name  
        wins
        losses
        percentage
        image
    }
}
}
`

【问题讨论】:

  • 可能您不需要charactersID 来创建用户对象 - 您可以使用单独的突变分配/添加/更改嵌套/相关数据

标签: reactjs mongodb graphql apollo react-apollo


【解决方案1】:

您的操作包括五个变量:

$name: String!
$email: String
$description: String
$totalwins: Int
$charactersID: ID!

其中只有两个是非空的,这意味着它们是必需的——namecharactersID。但是,您在调用突变函数时只提供nameemail

addUser({variables: {name: name.value, email: email.value }})

【讨论】:

  • 好吧,我有点想这是问题所在,但这并没有解决我想要创建一个用户的问题无需包含charactersID。我仍然需要它用于其他用途,但现在不需要
  • 如果你让变量可以为空(ID 而不是ID!),那么 GraphQL 就不需要它。在这种情况下,您也可以完全省略变量和参数。但是,如果参数的类型在架构中是 ID!,则 必须 提供 - 在这种情况下,您需要先更改架构。
  • 感谢您的帮助。我想到了。我的角色模型嵌套在用户模型中,因此我将不可为空的字段关闭并将它们更改为角色模型上的可空字段。它不是 id 本身,而是角色模型包含的字段,现在它按预期工作
猜你喜欢
  • 2019-06-29
  • 2019-05-29
  • 2019-05-01
  • 2019-03-22
  • 2020-01-10
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 2020-04-06
相关资源
最近更新 更多