我想改变我的阿波罗图QL客户端的默认头INSIDE一个反应成分,我根本不能设法找到的文档任何东西。因此,在我的 index.js 中,我按照描述创建并链接了我的客户端,并添加了一个 JWT 令牌标头。但是如果我想更改我的 React 组件中的标头怎么办。例如,我想在重新验证时替换令牌。
在 Axios 中,你可以简单地用它做一些事情。
axios.defaults.headers.common['Auth-Token'] = 'foo bar';
Run Code Online (Sandbox Code Playgroud)
我怎么能用 React Apollo 做这样的事情?这是我的 index.js 的重要部分
const httpLink = createHttpLink({
uri: 'https://somesecureapi',
});
const authLink = setContext((_, { headers }) => {
const token = localStorage.getItem('token');
return {
headers: {
...headers,
authorization: token ? `Bearer ${token}` : "",
}
}
});
const client = new ApolloClient({
link: authLink.concat(httpLink),
cache: new InMemoryCache()
});
Run Code Online (Sandbox Code Playgroud)
我尝试导出客户端,然后将其导入组件创建一个新链接并更改旧链接,但这不起作用。
必须有一些更简单的方法。有什么建议
我正在尝试测试导入.gql文件的组件。当我尝试在 Jest 文件中构建组件时,我收到此错误:
( object. anonymous function(module exports require __dirname __filename global jest) {
query getUser {
ˆˆˆˆˆˆˆ
<script>
import GET_USER from 'PATH';
ˆ
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何忽略导入?因为我不需要测试 GraphQL 调用。
有时,您需要 API 来执行不涉及检索或操作数据的操作。例如,发送“忘记密码”电子邮件或与第三方 API 交互。
Apollo(或 GraphQL 本身)是否有推荐的方法来实现这一点?
如果没有,有什么解决方案可以在仍然利用 Apollo 的好处(例如模式/类型检查)的同时实现这一点?
我已经在 GraphQL 服务器上工作了一段时间,虽然我了解大部分方面,但我似乎无法掌握缓存。
谈到缓存,我看到提到了 DataLoader 和 Redis,但我不清楚什么时候应该使用什么以及如何使用它们。
我认为 DataLoader 在字段级别上更多地用于解决 n+1 问题?我猜 Redis 处于更高的水平呢?
如果有人能对此有所了解,我将不胜感激。
谢谢你。
我正在使用 Nuxt 和Nuxt-Apollo创建我的 Vue 应用程序。我的文件中有以下 apollo 配置nuxt.config.js:
apollo: {
clientConfigs: {
default: {
httpEndpoint: 'http://localhost:8000/graphql/'
},
stage: {
httpEndpoint: 'https://example-stage.com/graphql/'
}
prod: {
httpEndpoint: 'https://example.com/graphql/'
}
}
}
Run Code Online (Sandbox Code Playgroud)
我如何指向stage或prod配置。每次我运行应用程序时,它都指向default配置。必须有我可以设置的地方。
当我模拟production(aka, playground is disabled) 并转到我的根目录时,http://localhost:9000/我收到以下响应:
400 Bad Request
GET query missing
Run Code Online (Sandbox Code Playgroud)
有没有办法防止这种情况或解决方法来呈现其他页面?
我是阿波罗的新手。我只使用apollo-server(没有快递)。我将不胜感激任何帮助。
我的项目目录结构是这样的:
- schema.graphql
- package.json
- packages
-- types
--- package.json
--- src
---- graphql-types
----- user.ts
----- generated
Run Code Online (Sandbox Code Playgroud)
现在在这里,schema.graphql包含从apollo client:download-schema. user.ts包含我这样的 graphql 查询:
- schema.graphql
- package.json
- packages
-- types
--- package.json
--- src
---- graphql-types
----- user.ts
----- generated
Run Code Online (Sandbox Code Playgroud)
现在的问题是,我需要为此查询生成类型定义,如果我在代码生成命令中添加文件的确切路径,则 apollo codegen 命令只会选择文件,如下所示:
我想告诉生成器搜索那里的所有 ts 文件。我尝试了以下但都失败了:
export const CURRENT_USER = gql`
query CurrentUser {
currentUser {
id
name
}
}
`;
Run Code Online (Sandbox Code Playgroud)
我总是得到两个错误之一:
No operations or fragments found to generate code for.
Run Code Online (Sandbox Code Playgroud)
或者 …
我第一次尝试阿波罗。我的后端服务器是 Phoenix 框架(长生不老药)。并在http://localhost:4000/api 中运行 所以我尝试在我的代码中使用 apollo 进行第一个查询。
import React from 'react';
import { StyleSheet, Text, View } from 'react-native';
import ApolloClient from 'apollo-boost';
import { gql } from 'apollo-boost';
const client = new ApolloClient(
{
uri: 'http://localhost:4000/api',
}
);
client.query({
query: gql`
{
users {
name
email
}
`}
}).then(result => console.log(result));
Run Code Online (Sandbox Code Playgroud)
但我有一个错误。
[Network error]: TypeError: Network request failed
node_modules/expo/build/logs/LogSerialization.js:166:14 in _captureConsoleStackTrace
node_modules/expo/build/logs/LogSerialization.js:41:24 in serializeLogDataAsync
... 9 more stack frames from framework internals
[Unhandled promise rejection: Error: Network error: …Run Code Online (Sandbox Code Playgroud) 我有这些代码行来初始化 ApolloServer,它工作正常
const server = new ApolloServer({schema, executor});
return server.listen(port).then(({url}) => {});
Run Code Online (Sandbox Code Playgroud)
我想更改 URL,这样做
return server.listen(port).then(({"dev.cold.net"}) => {});
Run Code Online (Sandbox Code Playgroud)
但我有一个编译错误:
TS2339: Property 'dev.cold.net' does not exist on type 'ServerInfo'
Run Code Online (Sandbox Code Playgroud) Apollo 不会动态存储来自查询的标头。
methods: {
fetchCars() {
const token = Cookies.get('XSRF-TOKEN')
console.log(token) // Token is shown in console
this.$apollo.query({
query: gql`
query {
cars {
uuid
name
}
}
`,
headers: {
'X-XSRF-TOKEN': token, // ? Fetch without header
},
})
},
},
Run Code Online (Sandbox Code Playgroud)
有没有办法为每个 Apollo 请求设置新的标头值?
我有一个单独的前端和后端。对于前端,我将 Nuxt.js 与 Apollo 一起使用。我想与我的服务器进行基于会话的通信。出于这个原因,我需要在每个请求中发送 CSRF 令牌。
现在的问题是:在第一次加载页面时,浏览器上没有设置 Cookie。我对 Nuxt 应用程序的每次初始化都执行 GET-Request。
fetch('http://127.0.0.1:8000/api/csrf-cookie', {
credentials: 'include',
})
Run Code Online (Sandbox Code Playgroud)
现在我设置了一个有效的 Cookie,并希望与 GraphQL Server 通信,但我的标头未在查询中动态设置。有谁知道我该如何解决这个问题?
我的 Laravel 后端现在抛出 419 令牌不匹配异常,因为我没有随请求发送 CSRF 令牌。
链接到存储库:https : //github.com/SuddenlyRust/session-based-auth …
apollo ×10
graphql ×6
nuxt.js ×2
vue-apollo ×2
absinthe ×1
caching ×1
cookies ×1
elixir ×1
graphql-tag ×1
jestjs ×1
node.js ×1
react-apollo ×1
react-native ×1
reactjs ×1
redis ×1
redux ×1
session ×1
typescript ×1
vue.js ×1