尝试使用在 react、graphql 和 apollo 中创建的服务器保存记录时出错

Posted

技术标签:

【中文标题】尝试使用在 react、graphql 和 apollo 中创建的服务器保存记录时出错【英文标题】:Error trying to save a record with server created in react, graphql and apollo 【发布时间】:2019-06-24 11:57:37 【问题描述】:

当我尝试从我的 UI 向 mi SERVER 发送寄存器时,会向我发送此消息

POST http://localhost:4000/graphql 400(错误请求) index.js:70 [GraphQL 错误]:消息:所需类型的变量“$description” “细绳!”未提供。,位置:[对象对象],路径: 未定义的 index.js:75 [网络错误]:ServerError:响应不 成功:收到状态码

这是我的类组件

import React,  Component, Fragment  from 'react';
import  Query, Mutation  from 'react-apollo';
import BrandItem from '../models/BrandItem';
import * as BrandService from '../services/BrandService';

export class Brand extends Component 
  render() 
    let input;

    return (
      <div className="divform">
        <Mutation mutation=BrandService.ADD_BRAND>
          
            (addBrand,  data ) => (
              <form onSubmit=e => 
                e.preventDefault();
                addBrand( variables:  type: input.value  );
                input.value = '';
              >
                <label htmlFor="description">Description</label>
                <input type="text" id="description" name="description" required ref=node =>  input = node;  />
                <input type="submit" value="Send" />
              </form>
            )
          

        </Mutation>
        <div>
          <Fragment>

            <Query query=BrandService.BRAND_QUERY>
              
                ( loading, error, data ) => 
                  if (loading) return <div><h4>loading....</h4></div>
                  if (error) console.log(error);

                  return <Fragment>
                    <table>
                      <thead>
                        <tr>
                          <th>Id</th>
                          <th>Description</th>
                        </tr>
                      </thead>
                      <tbody>
                        
                          data.brands.map(brand => (
                            <BrandItem key=brand.id brand=brand />
                          ))
                        
                      </tbody>
                    </table>
                  </Fragment>
                
              
            </Query>
          </Fragment>
        </div>
      </div>
    )
  


export default Brand

这是我的服务

import gql from 'graphql-tag';

export const BRAND_QUERY = gql`
  query BrandQuery 
    brands 
      id
      description
    
  
`;

export const ADD_BRAND = gql`
  mutation AddBrand($description: String!)
    addBrand(description: $description)
      id
    
  
`;

【问题讨论】:

【参考方案1】:

您好,问题出在这一行。

addBrand( variables:  type: input.value  );

在这里,您将传递变量类型,因为突变需要描述。因此,更改为以下内容应该可以解决您的问题。

addBrand( variables:  description: input.value  );

祝你好运,让我知道你过得怎么样。

【讨论】:

你好肖恩,非常感谢你的帮助,真的是这样。我从这些主题开始,你能告诉我什么结构或如何设计我的应用程序吗?谢谢。 我很高兴能帮上忙。你看起来已经做得很好了。就我个人而言,我会将视图与数据获取分开。因此,您的表单将是一个单独的组件,您可以传递 addBrand 属性。

以上是关于尝试使用在 react、graphql 和 apollo 中创建的服务器保存记录时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 react、redux 和 graphql 解决“未定义的 proptype”错误

react-apollo 没有连接到我的 graphql 本地服务器

React、Graphql 和 Passport.js

TypeError: data.Order.map 不是函数( react 和 graphql )

如何使用 React-Hooks 和 Apollo Client 在 React-GraphQL 中实现搜索功能?

Apollo+React:如何使用代理使客户端和 graphql 在同一个域上?