当前位置: 首页 > 知识库问答 >
问题:

当 Graphiql 和 Altair 以完全相同的突变成功时,反应阿波罗返回 Null?

壤驷高旻
2023-03-14

我已经在我的django石墨烯GraphiQLendpoint上测试了这种突变,并通过Altair(graphql的邮递员)在我的apollo客户端所指向的完全相同的endpoint上进行了测试。我使用相同的格式运行相同的变异,它可以与GraphiQL和Altair一起工作-新的数据库条目。

通过react apollo,它不会产生错误,我的django控制台显示:[29/11/2017 01:51:08]“POST/graphql HTTP/1.1”200 75

然而,实际上没有什么击中数据库。我尝试了console.log查询,它打印了数据结构,但是它应该创建的对象只显示“null”。

我已经重建了两次,但没有用。这是牛郎星突变,如预期的那样工作:

mutation {
  leadCreate(
    newLead:{
      firstName: "Bob",
      lastName: "Dole",
      email: "BobDole@graphql.com",
      staff: "1"
    }) {
    lead {
      id
    }
  }
}

它在Altair中返回结果:

STATUS: OK  STATUS CODE: 200 TIME SPENT: 641ms

{
 "data": {
  "leadCreate": {
   "lead": {
    "id": "2773"
   }
  }
 }
}

GraphiQL中的结果相同。

这是我的索引中的Apollo Link设置.js:

const httpLink = createHttpLink({
  uri: 'http://localhost:8000/graphql',
});

const client = new ApolloClient({
  link: httpLink,
  cache: new InMemoryCache(),
});

ReactDOM.render(
  <ApolloProvider client={client}>
    <App />
  </ApolloProvider>,
  document.getElementById('root'),
);
registerServiceWorker();

我应该注意到我所有的查询都工作正常,所以我相当有信心以上都是正确的。

这是我的LeadQuickCreate.js组件:

import React, { Component } from 'react';
import { graphql } from 'react-apollo';
import gql from 'graphql-tag';
import { Button, Input } from 'antd';
import { USER_ID } from '../../Utilities/constants';

class LeadQuickCreate extends Component {
  state = {
    firstName: '',
    lastName: '',
    phone: '',
    email: '',
  };

  createLink = async () => {
    const staff = localStorage.getItem(USER_ID);
    const {
      firstName, lastName, phone, email,
    } = this.state;
    const newLead = await this.props.createQuickLead({
      variables: {
        firstName,
        lastName,
        phone,
        email,
        staff,
      },
    });
    console.log('NewLead = ', newLead);
  };

  render() {
    const {
      firstName, lastName, phone, email,
    } = this.state;
    return (
      <div>
        <div>
          <Input
            value={firstName}
            onChange={e => this.setState({ firstName: e.target.value })}
            type="text"
            placeholder="Lead's First Name"
          />
          <Input
            value={lastName}
            onChange={e => this.setState({ lastName: e.target.value })}
            type="text"
            placeholder="Lead's Last Name"
          />
          <Input
            value={phone}
            onChange={e => this.setState({ phone: e.target.value })}
            type="text"
            placeholder="Lead's Phone Number"
          />
          <Input
            value={email}
            onChange={e => this.setState({ email: e.target.value })}
            type="text"
            placeholder="Lead's email address"
          />
        </div>
        <Button type="primary" onClick={() => this.createLink()}>
          Submit
        </Button>
      </div>
    );
  }
}

const CREATE_QUICK_LEAD = gql`
  mutation CreateQuickLead(
    $firstName: String!
    $lastName: String
    $phone: String
    $email: String
    $staff: ID!
  ) {
    leadCreate(
      newLead: {
        firstName: $firstName
        lastName: $lastName
        phone: $phone
        email: $email
        staff: $staff
      }
    ) {
      lead {
        id
      }
    }
  }
`;

export default graphql(CREATE_QUICK_LEAD, { name: 'createQuickLead' })(LeadQuickCreate);

当我单击“提交”按钮时,控制台日志会打印以下内容:

{data: {…}}
  data:
   leadCreate:
    lead: null 
    __typename: "LeadSerializerMutation"

等等。

所以我被卡住了。你知道它在哪里迷路了吗?

非常感谢。

编辑:Egads!当按照建议发送“正确格式”表单后仔细查看响应时,我意识到“staff”常量是作为字符串提交的。不知道为什么我的后端没有抛出一个可见的错误,但在提交之前快速“parseInt(staff )”,它的工作!

共有1个答案

洪育
2023-03-14

最后注意到<code>ID 以字符串形式发送,石墨烯endpoint正在查找整数。只需将我的突变呼叫更改为这个即可:

createLead = async values => {
    const { firstName, lastName, phone, email, } = values;
    let staff = localStorage.getItem(USER_ID);
    staff = parseInt(staff);

    const newLead = await this.props.createQuickLead({
      variables: {
        firstName,
        lastName,
        phone,
        email,
        staff,
      },
    });
 类似资料:
  • 我已经用React Apollo设置了一个React应用程序,可以成功地查询我的API。 但是,当我进行突变时,会出现奇怪的效果。我成功地取回了所有数据(如Chrome开发工具的网络选项卡中所示),但是当尝试数据时,它说它是。 以下是相关代码: 因此,当我调用函数时,我在控制台中收到以下内容: 但是在网络选项卡中查看时,我看到数据毕竟确实存在,并且正是我正在寻找的。此外,我的数据库已正确更新所有预

  • Apollo(阿波罗)是一款可靠的分布式配置管理中心,诞生于携程框架研发部,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。 一、背景介绍 服务端基于 Spring Boot 和 Spring Cloud 开发,打包后可以直接运行,不需要额外安装 Tomcat 等应用容器。 Java 客户端不依赖任何框架,能

  • 我正在将我的应用程序配置为使用apache shiro安全性,但是,我在日志输出中不断收到以下内容: 我的. ini文件目前如下所示: my web.xml中的相关片段如下: 我在tomcat 7容器上使用阿帕奇·希罗1.2,奇怪的是没有这么多问题来解决这个问题,我忽略了什么?

  • 简介 阿波罗 STM32F429 是正点原子推出的一款基于 ARM Cortex-M4 内核的开发板,最高主频为 180Mhz,该开发板具有丰富的板载资源,可以充分发挥 STM32F429 的芯片性能。 开发板外观如下图所示: 该开发板常用 板载资源 如下: MCU:STM32F429IGT6,主频 180MHz,1024KB FLASH ,256KB RAM 外部 RAM:W9825G6KH(S

  • 我使用 Visual Studio AWS 扩展是为了使用 Docker 映像模板创建简单的 aws lambda 函数。Docker 映像已生成、标记并最终推送到容器注册表。从那里,我使用容器映像创建一个新的 lambda 函数。但是当我测试它时(在本地使用dotnet lambda调用函数或使用AWS控制台上的测试工具),我得到了 亚马逊Lambda工具。NET核心应用程序(5.3.0)项目主

  • 有人能解释一下,当我尝试使用返回错误的突变时,为什么我的react应用程序apollo会这样做? GraphQL突变返回此信息(响应代码为200):<代码>{“错误”:[{“错误”:{“结果”:“身份。未找到”,“错误”:“身份验证失败”,“状态代码”:401}}}],“数据”:{“登录”:null}} 我的突变是这样的: 打电话: 它会像预期的那样运行一段时间(呈现我自己的自定义错误组件-<代码