标签: apollo

如何删除缓存控制头无缓存

我和我的团队正在研究 Laravel API,它与 Vue.js 前端通信,前端使用 Apollo 客户端来使用 GraphQL 响应。

我们遇到了将缓存控制标头添加到响应中的问题。

Apollo 无法缓存内容,因为响应包含以下标头:

Cache-Control: no-cache, private
Run Code Online (Sandbox Code Playgroud)

在 php.ini 中,我们可以禁用 PHP 发送缓存控制标头:

; Set to {nocache,private,public,} to determine HTTP caching aspects
; or leave this empty to avoid sending anti-caching headers.
; http://php.net/session.cache-limiter
session.cache_limiter =
Run Code Online (Sandbox Code Playgroud)

在 nginx 配置中,我们找不到任何设置这些标头的内容。我检查了我们在站点/可用中设置的全局 nginx.conf 和配置文件。

我可以将其添加到 nginx 配置中,但它只会添加另一个标头:

add_header Cache-Control "public";

Cache-Control: no-cache, private
Cache-Control: public
Run Code Online (Sandbox Code Playgroud)

如果此标头不是来自 PHP 或 nginx,那么它可能来自哪里?我该如何删除或覆盖它?

  • Laravel 5.5
  • Folkloreatelier/laravel-graphql
  • PHP 7.1
  • nginx 1.14.0
  • Ubuntu 16.04

php nginx laravel apollo graphql

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

与 apollo graphql 反应 firebase 身份验证

我发现了一篇很棒的文章,将身份验证添加到 react 中。文章:https : //www.robinwieruch.de/complete-firebase-authentication-react-tutorial/

本文使用一个 HOC 组件完成了 firebase 设置(在 redux 之前),我可以将其放入应用程序并可以通过上下文访问。

我的问题是如何将它放入应用程序组件之外的 apollo 客户端,因此即使有上下文我也无法设置它。我对 redux 也有同样的问题。我发现只有一个是使用本地存储,但我想避免这种情况。

这是主应用程序组件中我的 apollo 客户端。

const client = new ApolloClient({   
    uri: clientUrl,
  request: async operation => {
        const token = How_do_i_set_this <-- ???
        console.log('token in request', token)
    operation.setContext({
      headers: {
        authorization: token ? `Bearer ${token}` : ''
      }
    });
    }
});

const App = () => (
    <DashAppHolder>
        <ApolloProvider client={client}>
            <Provider store={store}>
                <PublicRoutes history={history} />
            </Provider>
        </ApolloProvider>
    </DashAppHolder>
);
Run Code Online (Sandbox Code Playgroud)

firebase apollo reactjs firebase-authentication

3
推荐指数
1
解决办法
2741
查看次数

Apollo Server,Graphql - 必须提供查询字符串

我不确定我在这里做错了什么?我现在在无服务器设置中让我的突变与我的 apollo-server-lambda 一起运行已经有一段时间了,当我尝试运行这样的查询时,我的查询工作正常:

{ "mutation": "{ signIn(username: \"SomeUser\", password: \"SomePassword\" ) { token } }" }
Run Code Online (Sandbox Code Playgroud)

我刚收到消息:“必须提供查询字符串。” 状态 400。

我已经像这样设置了我的解析器:

const resolvers = {
  Query: {
    users: async (_, args, ctx) => User.load(args, ctx)
  },

  Mutation: {
    signIn: async (_, { username, password }, ctx) => Auth.signIn({ username, password }, ctx)
  }
};
Run Code Online (Sandbox Code Playgroud)

对于额外的信息,这里是我的 typeDefs:

const typeDefs = gql`
  type User {
    id: ID!,
    firstname: String,
    lastname: String,
    username: String,
    createdAt: String,
    role: String
  }

  type AuthToken {
    token: String …
Run Code Online (Sandbox Code Playgroud)

javascript apollo graphql serverless

3
推荐指数
1
解决办法
3377
查看次数

在 Apollo graphql 服务器中检测取消订阅

在 Apollo 服务器中,当客户端用户订阅订阅(使用 WebSocket)时,我们可以使用订阅解析器检测到这一点。

但是有没有办法检测取消订阅?我看到 WebSocket 发送了一条{"id": "1", "type": "stop"}消息,但我不知道如何捕捉它

所以我不想知道用户何时从 Websocket 断开连接,而是用户何时取消订阅 Apollo 客户端的订阅。

apollo apollo-server

3
推荐指数
1
解决办法
1795
查看次数

Apollo graphql 将标头设置为 authmiddleware 不起作用

我正在使用 react-native 和 apollo 客户端,如果我尝试通过存储在 AsyncStorage 中的 jwt 设置标头,它似乎不起作用。
其他不需要标题的解析器工作得很好。我的代码如下。

import { ApolloClient } from "apollo-client";
import { InMemoryCache } from "apollo-cache-inmemory";
import { ApolloLink } from "apollo-link";
import { createHttpLink } from "apollo-link-http";
import AsyncStorage from "@react-native-community/async-storage";

const cache = new InMemoryCache();

const getToken = async () => {
  const token = await AsyncStorage.getItem("jwt");

  if (token) {
    return token;
  } else {
    return null;
  }
};

const httpLink = new createHttpLink({
  uri: ""
});

const authLink = new ApolloLink((operation, …
Run Code Online (Sandbox Code Playgroud)

async-await apollo react-native asyncstorage apollo-client

3
推荐指数
1
解决办法
2303
查看次数

登录 apollo-server 的推荐方式

Apollo 服务器似乎没有附带任何类型的日志记录。这使得它很难按原样在生产环境中使用 - 它实际上是盲目的。有没有推荐的方法来启用不同类型的日志?

我特别关注查看详细日志、错误日志(当服务器崩溃/内部组件崩溃时)和其他调试日志。

更新:我已经winston用于记录基本事件。这个问题与详细的日志记录有关——比如记录请求生命周期的各个部分、服务器崩溃、缓存错误等。

node.js apollo graphql apollo-server

3
推荐指数
1
解决办法
5629
查看次数

如何从`gql` 对象获取查询的名称?

我使用gql来自graphql-tag。假设我有一个这样gql定义的对象:

const QUERY_ACCOUNT_INFO = gql`
  query AccountInfo {
    viewer {
      lastname
      firstname
      email
      phone
      id
    }
  }
`
Run Code Online (Sandbox Code Playgroud)

必须有办法摆脱AccountInfo它。我该怎么做?

apollo graphql graphql-tag

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

如何使用角度和打字稿从 .graphql 文件加载查询

我正在使用 Angular 和 Ionic 开发一个应用程序。作为后端,我有一个运行 ApolloServer 和 Neo4j(使用grandstarter.io)的节点服务器。在客户端,我目前有一个名为 queries.ts 的文件,我在其中定义了我的 graphql 查询,如下所示:

supplierByName = (value) => {
    const query = gql`
    {
        Supplier(filter: {name: "${value}"}) {
            name
        }
    }
    `;

    return query;
};
Run Code Online (Sandbox Code Playgroud)

我正在使用 apollo 所以我这样做是为了运行我的 graphql 查询

this.apollo.query({
                query: this.queries.supplierByName(supplierName)
            })
            .subscribe(....)
Run Code Online (Sandbox Code Playgroud)

现在,由于不喜欢将我的 graphql 查询作为字符串,我希望将我的查询直接放在 .graphql 文件中。直接在 graphql 文件中工作时更好的工具,老实说,这主要是因为查询现在伤害了我的眼睛:)

我想要这样(文件:querys.graphql):

query supplierByName($value: String) {
 Supplier(filter: { name: "$value}" }) {
    name
 }
}
Run Code Online (Sandbox Code Playgroud)

然后当我用 Apollo 执行 graphql 查询时,我想做这样的事情:

 import supplierByName from './queries.graphql'
 .....
 this.apollo.query({
                query: supplierByName(supplierName)
            })
            .subscribe(....)
Run Code Online (Sandbox Code Playgroud)

并以某种简单的方式将其与 …

typescript apollo graphql angular

3
推荐指数
1
解决办法
2205
查看次数

管理对同一个 Apollo 突变的多次调用

所以看看文档中的 Apollo useMutation 示例https://www.apollographql.com/docs/react/data/mutations/#tracking-loading-and-error-states

function Todos() {
...
  const [
    updateTodo,
    { loading: mutationLoading, error: mutationError },
  ] = useMutation(UPDATE_TODO);
...

  return data.todos.map(({ id, type }) => {
    let input;

    return (
      <div key={id}>
        <p>{type}</p>
        <form
          onSubmit={e => {
            e.preventDefault();
            updateTodo({ variables: { id, type: input.value } });

            input.value = '';
          }}
        >
          <input
            ref={node => {
              input = node;
            }}
          />
          <button type="submit">Update Todo</button>
        </form>
        {mutationLoading && <p>Loading...</p>}
        {mutationError && <p>Error :( Please try again</p>}
      </div>
    );
  }); …
Run Code Online (Sandbox Code Playgroud)

javascript apollo reactjs graphql

3
推荐指数
1
解决办法
3330
查看次数

如何在 forEach 中运行 useQuery?

我有循环 - forEach - 为数组的每个元素找到 productId 。我想使用 apollo 查询通过 productId 获取我的数据库。怎么做?

products.forEach(({ productId, quantity }) =>
    // fetch by 'productId'

);
Run Code Online (Sandbox Code Playgroud)

javascript hook apollo graphql

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