在graphQLOptions中,context和rootvalue之间有什么区别?
我何时应该使用另一个,何时应该使用另一个?
目前我正在将连接器和其他敏感数据附加到上下文中,这样安全吗?用户可以读取查询的上下文或根值吗?
我有一个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客户端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表。渲染阶段可以忽略。在此阶段,似乎有很多排队的事件或“工作”。也许有一种方法可以暂停此操作?铬'
无论如何,任何建议都将不胜感激。
屏幕截图列为:功能| 调用计数| 时间(秒)
我有一个<Query />在我的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 />组件-
<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) 我只是想知道这个看似笨拙的配置是什么原因(来自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的正常中间件流程?采用阿波罗方式的优势是什么?
AppSync通过WebSockets使用MQTT进行订阅,而Apollo使用WebSockets。无论是Subscription组件或subscribeForMore在Query我的作品组件使用时与阿波罗的AppSync。
AppSync的一项功能引起了广泛的关注,它强调实时数据。在后台,AppSync的实时功能由GraphQL订阅提供支持。虽然Apollo通过subscriptions-transport-ws将其订阅基于WebSockets,但GraphQL中的订阅实际上足够灵活,使您可以将它们基于另一种消息传递技术。AppSync的订阅使用MQTT代替WebSockets作为传输层。
有什么方法可以在仍然使用Apollo的同时使用AppSync?
我在我的应用程序中使用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,但如何解决?
我正在尝试组合两个依赖的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) 在我的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) apollo ×10
graphql ×7
javascript ×4
react-apollo ×3
reactjs ×3
express ×2
node.js ×2
aws-appsync ×1
caching ×1
cors ×1
middleware ×1
mqtt ×1
nuxt ×1
react-native ×1
relay ×1
relayjs ×1
typescript ×1
vue.js ×1
websocket ×1