我有一个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的文档找到任何解决方案.
我只是想知道这个看似笨拙的配置是什么原因(来自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的正常中间件流程?采用阿波罗方式的优势是什么?
我在我的应用程序中使用GraphQL + Relay,发现自己几乎包含了所有组件createFragmentContainer,包括DOM层次结构中非常低的组件(通常是功能组件).
这是使用片段的正确方法吗?我想知道何时在片段容器中包装组件的准则是什么?当一个组件只需要一个字段并且我可以通过props从父节点传递那些数据时,似乎是多余的.
我正在使用Relay,但我认为这些概念与Apollo相似.
我正在使用打字稿构建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,但如何解决?
我有以下架构:
type Post {
id: ID!
text: String
}
Run Code Online (Sandbox Code Playgroud)
我正在使用自动生成的突变neo4j-graphql.js,因此我可以访问以下突变:
UpdatePost(
id: ID!
text: String
): Post
Run Code Online (Sandbox Code Playgroud)
问题:
当我使用以下查询时:
mutation update($id: String, $text: String) {
UpdatePost(id: $id, text: $text) {
id
text
}
}
Run Code Online (Sandbox Code Playgroud)
具有以下参数:
{
"id": "a19289b3-a191-46e2-9912-5a3d1b067cb2",
"text": "text"
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
{
"error": {
"errors": [
{
"message": "Variable \"$id\" of type \"String\" used in position expecting type \"ID!\".",
"locations": [
{
"line": 1,
"column": 17
},
{
"line": 2,
"column": 18
}
],
"extensions": {
"code": …Run Code Online (Sandbox Code Playgroud) 我想订阅 GraphQL 服务器。该应用程序在 NodeJS 脚本中运行(即不在网络浏览器中)。
这是我目前所做的:
const fetch = require("node-fetch").default;
const apollo = require("apollo-boost");
const ApolloClient = apollo.default;
const { gql } = require("apollo-server");
const apolloClient = new ApolloClient({
uri: "http://localhost:4000/graphql",
fetch
});
apolloClient.subscribe({
query: gql`
subscription {
startTaskRequested {
pkRobot
taskName
}
}
`,
}).subscribe({
next(x) { console.log(x) },
error(err) { console.log(`Finished with error: ${ err }`) },
complete() { console.log('Finished') }
});
Run Code Online (Sandbox Code Playgroud)
结果输出是:
{ data: { startTaskRequested: null } }
Finished
Run Code Online (Sandbox Code Playgroud)
在 GraphQL Server 上,我可以看到相应的解析器从未被调用。
如果我使用 Apollo 的 …
有人尝试过有条件调用吗useSubscription?我想在完成useSubscription后立即打电话。useLazyQuery例如,当我填充数据表时,应useLazyQuery在表中显示获取的数据后立即调用订阅。以便表保持更新。useLazyQuery在安装组件时调用。如果有,请与我分享您的解决方案。谢谢!
我最近刚刚开始学习 GraphQL 和 React-Apollo,我想知道如果我需要在同一个组件中使用useQuery和挂钩,推荐的使用方法是什么。useMutation由于两个钩子都返回{data, loading, error}对象,因此名称存在冲突。我应该在解构时为属性分配唯一的名称,还是将逻辑移动到单独的容器组件更好?
我有一个带有 React 和 Apollo Client 的前端,并且正在尝试编写一些简单的测试。
我的应用程序如下所示:
ApolloProvider.js
import React from "react"
import App from "./App"
import ApolloClient from "apollo-client"
import { InMemoryCache } from "apollo-cache-inmemory"
import { createHttpLink } from "apollo-link-http"
import { ApolloProvider } from "@apollo/react-hooks"
import { setContext } from "apollo-link-context"
const httpLink = createHttpLink({
uri: "...backend....",
})
const authLink = setContext(() => {
const token = localStorage.getItem("jwtToken")
return {
headers: {
Authorization: token ? `Bearer ${token}` : "",
},
}
})
const client = new ApolloClient({ …Run Code Online (Sandbox Code Playgroud) apollo reactjs react-apollo apollo-client react-testing-library
我对 GraphQL 有点陌生,这个问题属于“它不可能这么难。我必须遗漏一些东西。”
我有一个相当标准的 GraphQL/Apollo/React 应用程序,分为客户端和服务器。客户端调用 API 并从服务器获取数据时,一切都运行良好。客户端甚至可以将文件上传到服务器。但是,我现在需要服务器流回保存在磁盘上的文件。就是这样。
这是“我必须遗漏一些东西”的部分。我在文档和 Stackoverflow 上看到的所有内容都是从服务器推回文件并通过 GraphQL 查询作为 Base64 编码的字符串,然后在客户端上执行一些非常 hacky 的操作,通常涉及隐藏的 href 标签和模拟点击。对此我说:“什么???”
严重地。磁盘上有服务器知道如何查找的文件。客户端需要向用户显示一个按钮,用户可以单击该按钮来下载文件。就是这样。所有其他语言的其他框架都有一个简单的方法来做到这一点。有人可以告诉我我在这里缺少的极其简单的事情吗?
谢谢,亚历克斯
apollo ×10
graphql ×8
reactjs ×5
javascript ×2
react-apollo ×2
express ×1
grandstack ×1
middleware ×1
node.js ×1
nuxt ×1
react-hooks ×1
react-native ×1
relay ×1
relayjs ×1
typescript ×1
vue.js ×1