标签: apollo

Apollo GraphQL中的Context vs RootValue

graphQLOptions中,context和rootvalue之间有什么区别?

我何时应该使用另一个,何时应该使用另一个?

目前我正在将连接器和其他敏感数据附加到上下文中,这样安全吗?用户可以读取查询的上下文或根值吗?

node.js apollo graphql apollo-server

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

如何使用Apollo-Client为请求设置超时

我有一个React-Native应用程序,我向GraphQL服务器发出请求.一切正常,但我需要一种方法将请求/客户端的超时设置为5或10秒.目前,该请求需要很长时间才能超时(大约1分钟).

这是我如何使用客户端的快速示例.

const client = new ApolloClient({
  networkInterface: createNetworkInterface({
    uri: `${config.server_hostname}/graphql`
  })
});

client.query({ query: gqlString });
Run Code Online (Sandbox Code Playgroud)

我无法通过StackOverflow,谷歌搜索或Apollo的文档找到任何解决方案.

javascript apollo graphql react-native apollo-client

6
推荐指数
1
解决办法
4660
查看次数

大数据集的Apollo InMemoryCache性能策略(反应)

从Apollo客户端GraphqQL查询中收到的我要调整的应用程序的初始数据集目前非常大。在“大”中,我的意思是数据似乎在缓存中的“数据”键下归一化为大约7,000个条目。有效负载约为1.6MB。如果要保存缓存的数据条目,则将其标准化为大约3MB。我不喜欢初始查询的工作方式,因为我目前正在重新设计其应用程序以在图形上使用游标和过滤,而不是客户端获取大量数据并自行过滤。当前实现无法扩展,因为在其他位置安装此软件时将返回更大的数据集。但是,我正在寻找一种短期解决方案,以便在执行非常大的重新设计任务时使此缓存的构建速度更快。

*更新于2018年7月25日**游标方法不起作用,因为在获取数据的每个页面/光标期间添加了更多条目时,缓存写入性能下降。

真正的问题是,由于该浏览器的行业(医疗保健)用途,我们必须支持IE 11,它非常慢。这很难衡量,但是在Apollo缓存和响应集成代码方面,它比Chrome慢大约8-10倍。Chrome可能需要1-2秒才能在这些速度较慢的虚拟桌面上构建缓存,而IE则需要10-20秒。

因此,我的问题是:是否有任何性能调整可以帮助缓存更快地构建?我已经附上了屏幕截图,以显示瓶颈所在。chrome与IE中相同,但IE中仅慢了一个数量级。我不确定这是IE的缺点,还是某些可怕的疯狂polyfill问题。屏幕截图显示了性能结果中显示的热点。是的,此屏幕截图是React的开发版本,但我们看不到产品中的任何真正明显的性能提升。屏幕截图实际上只是对图形的调用,并且呈现了约260行的最简单的HTML表。渲染阶段可以忽略。在此阶段,似乎有很多排队的事件或“工作”。也许有一种方法可以暂停此操作?铬'

无论如何,任何建议都将不胜感激。

屏幕截图列为:功能| 调用计数| 时间(秒)

IE11性能截图

caching apollo graphql

6
推荐指数
1
解决办法
522
查看次数

React Apollo客户端突变组件中的refetchQueries无法正常工作?

我有一个<Query />在我的Home.js文件

Home.js

<Query
      query={GET_TODOS_BY_PRODUCT}
      variables={{ id: state.get("selectedProduct.id"), completed: true }}
    >
      {({ data: { product } }) => {
        return <Main todos={product.todos} hashtag={product.hashtag} />;
      }}
</Query>
Run Code Online (Sandbox Code Playgroud)

在我的Main.js文件中,我有<Mutation />组件-

Main.js

<Mutation
    key={v4()}
    mutation={SWITCH_SELECTED_PRODUCT}
    refetchQueries={() => {
        console.log("refetchQueries", product.id);
        return {
            query: GET_TODOS_BY_PRODUCT,
            variables: { id: product.id }
        };
    }}
>
{switchSelectedProduct => (
        <Product
            onClick={() => {
                switchSelectedProduct({
                    variables: { id: product.id, name: product.name }
                });
            }}
            highlight={
                data.selectedProduct
                    ? product.name === …
Run Code Online (Sandbox Code Playgroud)

javascript apollo reactjs graphql react-apollo

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

为什么Apollo Server不是Express的中间件,而不是一个接受Express作为中间件的服务器?

我只是想知道这个看似笨拙的配置是什么原因(来自Apollo Server的入门),

const server = new ApolloServer({
  // These will be defined for both new or existing servers
  typeDefs,
  resolvers,
});

server.applyMiddleware({ app }); // app is from an existing express app
Run Code Online (Sandbox Code Playgroud)

为什么我正在打电话.applyMiddleware()给我app而不是使用app.use()它,甚至似乎从文档来看,Apollo只是回答请求/graphql而不是更好地遵循Express API,

let apollo = require('apollo-server').ApolloMiddleware
app.use( '/graphql', apollo({ typeDefs, resolvers }) );
Run Code Online (Sandbox Code Playgroud)

似乎Apollo正在颠覆Express的正常中间件流程?采用阿波罗方式的优势是什么?

middleware express apollo graphql

6
推荐指数
1
解决办法
318
查看次数

如何将Apollo Client与AppSync一起使用?

AppSync通过WebSockets使用MQTT进行订阅,而Apollo使用WebSockets。无论是Subscription组件或subscribeForMoreQuery我的作品组件使用时与阿波罗的AppSync。

AppSync的一项功能引起了广泛的关注,它强调实时数据。在后台,AppSync的实时功能由GraphQL订阅提供支持。虽然Apollo通过subscriptions-transport-ws将其订阅基于WebSockets,但GraphQL中的订阅实际上足够灵活,使您可以将它们基于另一种消息传递技术。AppSync的订阅使用MQTT代替WebSockets作为传输层。

有什么方法可以在仍然使用Apollo的同时使用AppSync?

websocket mqtt apollo react-apollo aws-appsync

6
推荐指数
1
解决办法
3935
查看次数

Relay/Apollo片段的粒度应该是多少?

我在我的应用程序中使用GraphQL + Relay,发现自己几乎包含了所有组件createFragmentContainer,包括DOM层次结构中非常低的组件(通常是功能组件).

这是使用片段的正确方法吗?我想知道何时在片段容器中包装组件的准则是什么?当一个组件只需要一个字段并且我可以通过props从父节点传递那些数据时,似乎是多余的.

我正在使用Relay,但我认为这些概念与Apollo相似.

relay apollo reactjs graphql relayjs

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

Apollo不可分配给'VueClass &lt;Vue&gt;类型的参数

我正在使用打字稿构建nuxt.js应用程序。这是我的代码:

<script lang='ts'>
    import {Component, Vue} from 'nuxt-property-decorator';
    import {LOCATION} from '~/constants/graphql/location';

    @Component({
        apollo: {
            getLocation: {
                query: LOCATION,
                variables(): object {
                    return {
                        id: 10,
                    };
                },
                prefetch: true,
            },
        },
    })
    export default class Home extends Vue {
    }
</script>
Run Code Online (Sandbox Code Playgroud)

我有错误:

Argument of type '{ apollo: { getLocation: { query: any; variables(): object; prefetch: boolean; }; }; }' is not assignable to parameter of type 'VueClass<Vue>'.
Run Code Online (Sandbox Code Playgroud)

对象文字只能指定已知的属性,而'apollo'在'VueClass'类型中不存在。

我知道它来自TS,但如何解决?

javascript typescript apollo vue.js nuxt

6
推荐指数
1
解决办法
335
查看次数

如何将两个依赖的GraphQL查询与'compose'结合起来?

解决了!

我正在尝试组合两个依赖的GraphQL查询.

第一个应该获得一个ID,第二个应该获取该ID.我读到compose的行为类似于flowRight(),但无论我放置查询的顺序如何,如果queryId低于queryDetails,则始终跳过queryDetail(如预期的那样).无论我如何将代码放在一起,变量都是未定义的.

import { graphql, compose } from 'react-apollo'
import gql from 'graphql-tag'

class Home extends Component {
  constructor(props) {
    super(props)
    console.log("Where's my data?")
    console.log(props)
  }

  render() {
    return(
      <div />
    )
  }
}

export const queryIdConst = gql`
  query IdQuery {
    account(name:"SuperAccount") 
    {
      lists {
        edges {
          id
        }
      }
    } 
  }
`

export const queryDataConst = gql`
  query DataQuery($id: ID!) {
    account(name:"SuperAccount") 
    {
      list(id: $id) {
        displayTitle
      }
    } 
  }
`

export default compose(
  graphql(queryIdConst, {
    name: …
Run Code Online (Sandbox Code Playgroud)

javascript apollo reactjs graphql react-apollo

6
推荐指数
1
解决办法
721
查看次数

CORS飞行前响应与实际响应不匹配

在我的node.js服务器中,我将CORS作为中间件包含在内,如下所示:

app.use(cors({ origin: 'http://<CORRECT_ORIGIN_URL>:3030', credentials: true }))
Run Code Online (Sandbox Code Playgroud)

我在发送请求的应用中使用Apollo Client,并在初始化ApolloClient时将凭据设置为“ include”,如下所示:

// Create a WebSocket link
const wsLink = process.browser ? new WebSocketLink({
    uri: `ws://<CORRECT_REQUEST_URL>:8000/graphql`,
    options: {
        reconnect: true,
    },
}) : null

// Create an http link (use batch, allow cookies response from server)
const httpLink = new BatchHttpLink({
    uri: 'http://<CORRECT_REQUEST_URL>/api/',
    credentials: 'include'
})


// Split terminating link for websocket and http requests
const terminatingLink = process.browser ? split(
    ({ query }) => {
        const { kind, operation } = …
Run Code Online (Sandbox Code Playgroud)

node.js cors express apollo apollo-server

6
推荐指数
1
解决办法
2733
查看次数