标签: apollo

Apollo 客户端不显示错误消息

我已经配置并设置了一个功能齐全的 express-nextjs-graphql-apollo 应用程序,它可以登录/注销用户,并完美地执行 CRUD。最后一个非常重要的步骤是在客户端显示错误消息。

到目前为止,我只在控制台中收到此红色错误: POST http://localhost:3000/graphql 500 (Internal Server Error)

例如,登录表单验证。当没有提供输入时,它应该得到一个无效的输入错误消息,或者E-Mail is invalid如果电子邮件格式不正确。

以下在 graphql 中测试的变异代码localhost:3000/graphql

mutation {
  login(userInput: {email:"" password:""}){
    userId
  }
}
Run Code Online (Sandbox Code Playgroud)

返回下面的消息。我实际上希望此消息显示在客户端上。

{
  "errors": [
    {
      "message": "Please provide input.",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": [
        "login"
      ]
    }
  ],
  "data": null
}
Run Code Online (Sandbox Code Playgroud)

我还尝试使用 onError 在 Mutation 组件内的客户端上显示错误消息:

    onError={error => {
        console.log("ERROR in SigninBox component ", error);
      }}
Run Code Online (Sandbox Code Playgroud)

这仅在控制台中显示此错误消息: Response not successful: Received status code 500

这是我 …

error-handling apollo reactjs graphql graphql-js

2
推荐指数
1
解决办法
2676
查看次数

使用 GraphQL 的“其他”

如何使用 GQL 指令实现“else”效果

有一种方法来获取与有条件的东西GQL使用@include(if: $withFriends)

query Hero($episode: Episode, $withFriends: Boolean!) {
  hero(episode: $episode) {
    name
    friends @include(if: $withFriends) {
      name
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但如果$withFriends是假的,我想获取其他东西。我可以通过传递额外的变量来实现它$notWithFriends

query Hero($episode: Episode, $withFriends: Boolean!) {
  hero(episode: $episode) {
    name
    friends @include(if: $withFriends) {
      name
    }
    appearsIn @include(if: $notWithFriends)
  }
}
Run Code Online (Sandbox Code Playgroud)

问题:是否可以避免使用附加变量?

像这样:@include(else: $withFriends)@include(ifNot: $withFriends)@include(if: !$withFriends)

relay apollo graphql

2
推荐指数
1
解决办法
1509
查看次数

ApolloClient: Invariant Violation 1 – 正确设置 apollo 客户端

我是 GraphQL 和 Apollo 的新手,我真的很难在 node.js 中设置 apolloClient。

首先我想提一下,我使用nuxt 的 apollo 模块成功地在 nuxt 中设置了一个 apollo 客户端。

所以我完全确定我的端点和我的令牌正在工作。

现在我想在一个 JavaScript 文件中设置一个 apollo 客户端,我想在 node.js 中运行它。

import fetch from 'node-fetch'
import gql from 'graphql-tag'
import { ApolloClient } from 'apollo-client'
import { createHttpLink } from 'apollo-link-http'
import { setContext } from 'apollo-link-context'

export default function generateRoutesFromData(
  options = {
    api: [],
    query: '',
    token: '',
    bundle: '',
    homeSlug: 'home',
    errorPrefix: 'error-'
  }
) {
  const uri = 'https://example.com/api'
  const token …
Run Code Online (Sandbox Code Playgroud)

javascript apollo graphql apollo-client apollo-boost

2
推荐指数
1
解决办法
3879
查看次数

“消息”错误:“禁止”尝试查询 Apollo Serverless Lambda 服务器

我正在尝试遵循此示例,https://www.apollographql.com/docs/apollo-server/deployment/lambda/创建一个无服务器 GraphQL 服务器,该服务器返回“Hello world”。

根目录基本上只包含两个文件,graphql.js以及serverless.yml

> tree . -I node_modules
.
??? graphql.js
??? package-lock.json
??? package.json
??? serverless.yml
Run Code Online (Sandbox Code Playgroud)

其中,如示例中所示,graphql.js读取

const { ApolloServer, gql } = require('apollo-server-lambda');

const typeDefs = gql`
  type Query {
    hello: String
  }
`;

const resolvers = {
  Query: {
    hello: () => 'Hello world!',
  },
}

const server = new ApolloServer({ typeDefs, resolvers });

exports.graphqlHandler = server.createHandler();
Run Code Online (Sandbox Code Playgroud)

serverless.yml阅读

service: apollo-lambda

provider:
  name: aws
  runtime: nodejs8.10 …
Run Code Online (Sandbox Code Playgroud)

javascript node.js apollo graphql serverless

2
推荐指数
1
解决办法
1759
查看次数

如何将 useQuery 作为异步任务调用

我是React Native和 的新手Apollo-Client。在我的屏幕中有三个选项卡,各个选项卡正在调用自己的数据。但是由于useQuery用户界面完全冻结并提供非常糟糕的体验。

有没有其他方法可以useQuery以异步方式或在任何后台任务中调用?

编辑

function PlayerList(props) {

    const [loading , setloading] = useState(true)
    const [data, setData] = useState()
    const [loadData, { tempLoading, tempError, tempData }] = useLazyQuery(query);
   

   async function getData(){
        loadData()
   }

    useEffect(() => {

        if (tempData == undefined) {
            getData()
        }

    })

     if(tempLoading){
           return 
                <View >....</View>
     }
     if(tempData) {
          return ( <View> ... </View>) }

 }
Run Code Online (Sandbox Code Playgroud)

请找到上面的代码以便更好地理解。

apollo graphql react-native apollo-client react-hooks

2
推荐指数
1
解决办法
6549
查看次数

如何编写 Apollo Server 插件来记录请求及其持续时间

我很惊讶我找不到一个库或示例来执行以下操作:

我想要对服务器的每个请求的简单服务器日志,该日志将说明请求的查询或更改,以及完成请求所用的时间

我知道有插件和扩展框架。但我不确定在两个回调之间保持状态的最佳做法是什么:requestDidStartwillSendResponse

会吐出的东西:

path="createAccountMutation" service=20ms
Run Code Online (Sandbox Code Playgroud)

额外的功劳是显示有效载荷的大小

path="createAccountMutation" service=20ms bytes=355
Run Code Online (Sandbox Code Playgroud)

很想在打字稿中看到解决方案

注意:我找到了apollo-log——但它不做请求持续时间

谢谢!

typescript apollo graphql apollo-server

2
推荐指数
2
解决办法
2385
查看次数

如何在 Graphql 突变中返回 PDF 文件?

我在前端使用 React 和 Graphql,在后端使用 Django 和 Graphene。

我希望能够下载报告的 pdf 文件。我尝试使用突变来做到这一点,如下所示:

const [createPdf, {loading: createPdfLoading, error: createPdfError}] = useMutation(CREATE_PDF)
const handleCreatePDF = async (reportId) => {
        const res = await createPdf({variables: {reportId: parseInt(reportId) }})
        debugger;
    };

export const CREATE_PDF = gql`
    mutation ($reportId: Int!) {
        createPdf (reportId: $reportId){
            reportId
        }
    }
`;
Run Code Online (Sandbox Code Playgroud)

在后端,我有这样的事情:

class CreatePDFFromReport(graphene.Mutation):
    report_id = graphene.Int()

    class Arguments:
        report_id = graphene.Int(required=True)

    def mutate(self, info, report_id):
        user = info.context.user

        if user.is_anonymous:
            raise GraphQLError("You are not logged in!")

        report …
Run Code Online (Sandbox Code Playgroud)

python django apollo reactjs graphql

2
推荐指数
1
解决办法
4113
查看次数

不能为不可为空的字段返回空值,调试器不显示空值

我有这个 schema.graphql

### This file was generated by Nexus Schema
### Do not make changes to this file directly


type AuthPayload {
  token: String!
  users: users!
}

scalar DateTime

type Mutation {
  login(email: String, password: String): AuthPayload!
  signup(CREATED_BY: String, EMAIL: String, FIRST_NAME: String, IS_ACTIVE: Boolean, PASSWORD: String, USERNAME: String): AuthPayload!
}

type Query {
  me: users
}

type users {
  CREATED_BY: String!
  CREATED_ON: DateTime
  EMAIL: String!
  FIRST_NAME: String!
  id: Int!
  IS_ACTIVE: Boolean!
  LAST_NAME: String
  MODIFIED_BY: String
  MODIFIED_ON: DateTime
  ORGANIZATION_ID: String …
Run Code Online (Sandbox Code Playgroud)

apollo graphql prisma

2
推荐指数
1
解决办法
4602
查看次数

如何为 Vue Apollo 导入 Apollo Client 3?

Vue-Apollo 3.04的发行说明指出现在有Apollo Client 3支持。由于该文档阿波罗客户端3声明ApolloClientInMemoryCacheHttpLink,现在都在一个 @apollo/client封装-不像以前的单包。

https://github.com/vuejs/vue-apollo/releases/tag/v3.0.4

https://www.apollographql.com/docs/react/migrating/apollo-client-3-migration/

但是,Vue-Apollo ( apollo-client-> @apollo/client?)的文档中没有关于如何应用新更改的更改。另外, 阿波罗客户端3 Doc's指出,对于Vue公司,你必须导入ApolloClient@apollo/client/core

所以我以自己的方式尝试过,但我的导入似乎失败了。我从npmm run serve. 看来他想进口一些react东西。

     ERROR  Failed to compile with 8 errors                                                                                                             20:25:20
This dependency was not found:

* react in ./node_modules/@apollo/client/react/context/ApolloConsumer.js, ./node_modules/@apollo/client/react/context/ApolloContext.js and 6 others

To install it, you can run: npm install --save react
Run Code Online (Sandbox Code Playgroud)

vue-apollo.js(来自有效的旧项目)


import Vue from 'vue'
import { …
Run Code Online (Sandbox Code Playgroud)

apollo vue.js vuejs2 apollo-client vue-apollo

2
推荐指数
1
解决办法
1265
查看次数

数据未合并,带有字段策略的 Apollo 3 分页

这是我的两个文件。我试图用我自己的数据模拟这个沙箱的结果:https : //codesandbox.io/embed/stoic-haze-ispw2?codemirror=1

基本上我可以看到数据被获取并更新了缓存,但我的组件 ResourceSection 数据列表没有更新。

[更新] 根据反馈进行了一些重大更改。从组件中删除了查询,我创建了一个 skipLimitPagination 函数。查询有效,但我的缓存没有更新或将数据放入其中。

import React from "react";
import { BrowserRouter as Router } from "react-router-dom";
import "./App.css";
import { ApolloClient, InMemoryCache, ApolloProvider } from "@apollo/client";
import Home from "./screens";
import { skipLimitPagination } from './utils/utilities'

const client = new ApolloClient({
  uri: `https://graphql.contentful.com/content/v1/spaces/${process.env.REACT_APP_SPACE_ID}/?access_token=${process.env.REACT_APP_CDA_TOKEN}`,
  cache: new InMemoryCache({
   typePolicies: {
     Query: {
       fields: {
         resourceCollection: {items: skipLimitPagination()}
       }
     }
   }
  }),
});

function App() {
  return (
    <ApolloProvider client={client}>
      <Router>
        <Home />
      </Router>
    </ApolloProvider>
  ); …
Run Code Online (Sandbox Code Playgroud)

apollo graphql apollo-client

2
推荐指数
1
解决办法
2339
查看次数