我正在致力于为 graphql实现一个节点接口——一个非常标准的设计模式。
寻找有关为 graphql 实现节点查询解析器的最佳方法的指导
node(id ID!): Node
我正在努力解决的主要问题是如何对类型名的 ID 进行编码/解码,以便我们可以找到要查询的正确表/集合。
目前我正在使用 postgreSQL uuid 策略和 pgcrytpo 来生成 ids。
应用程序中执行此操作的正确接缝在哪里?:
一旦选择了最好的接缝:
请注意我的堆栈是:
我正在拨打电话,返回问题及其答案。当我直接向服务器发送此消息时,响应符合预期。此外,当 React 进行调用并且我检查开发人员工具时,响应符合预期。
一旦我收到阿波罗的回应,数据就变得混杂,结果也相互渗透。
您会注意到,在这两张图中,扩展一些结果后的结果是相同的。我不确定是什么原因造成的。
为什么要结合自由形式?
我的设置是这样的:
我导入查询,然后在 Apollo 客户端上运行:
this.props.client.query({ query: getCoreObjectsQuery, variables: { companyId: 1}})
.then((result) => {
console.log(result, 'getCoreObjectsQuery')
Run Code Online (Sandbox Code Playgroud)
从那里,当我查看 getCoreObjectsQuery 时,它看起来像上面的图像!
我使用 apollo-server 编写 graphql 代码。在发送数据之前,我想根据可选字段和过滤器对数据进行某种排序,并且我需要知道编写代码的正确方法?graphql中有没有一种方法可以自动对我的数据进行排序?
我使用lodash进行排序,我认为在我搜索后我看到了prisma但它们没有优化,但我的数据是由另一个不在数据库中的 api 返回的。我需要像棱镜这样的东西。
我的代码是这样的,我想根据查询中的名称或姓氏对书籍进行排序,但在 api 返回的实际书籍对象中。
const { ApolloServer, gql, } = require('apollo-server');
const books = [
{
title: 'Harry Potter and the Chamber of Secrets',
authors: [{"name":"a1", "lastName":"aa1"},{"name":"b1", "lastName":"bb1"},{"name":"c1", "lastName":"cc1"}]
},
{
title: 'Jurassic Park',
authors: [{"name":"a" ,"lastName":"aa"},{"name":"b", "lastName":"bb"},{"name":"c", "lastName":"cc"}]
},
];
const typeDefs = gql`
type Book {
title: String
authors: [Author]
}
type Query{
books: [Book]
}
type Author{
name: String
lastName: String
}
`;
const resolvers = { …Run Code Online (Sandbox Code Playgroud) 我正在像这样设置 Apollo 客户端。
const defaultOptions = {
watchQuery: {
fetchPolicy: 'cache-and-network',
errorPolicy: 'ignore',
},
query: {
fetchPolicy: 'cache-and-network',
errorPolicy: 'all',
},
mutate: {
errorPolicy: 'all',
},
};
return new ApolloClient({
link: ApolloLink.from([authLink, errorLink, webSocketOrHttpLink]),
defaultOptions, // Typescript don't like this.
queryDeduplication: true,
});
Run Code Online (Sandbox Code Playgroud)
打字稿给出了这个错误:
Type '{ watchQuery: { fetchPolicy: string; errorPolicy: string; }; query: { fetchPolicy: string; errorPolicy: string; }; mutate: { errorPolicy: string; }; }' is not assignable to type 'DefaultOptions'.ts(2322)
ApolloClient.d.ts(23, 5): The expected type comes from property …Run Code Online (Sandbox Code Playgroud) 我正在使用 graphql union - union FolderOrFile = Folder | File。当我仅查询文件夹时,我得到的数组包含带有空对象的文件夹对象,这些对象基本上是文件对象。
类型定义
const typeDefs = gql`
union FolderOrFile = Folder | File
type Folder {
name: String
path: String
type: String
children: [FolderOrFile]
}
type File {
name: String
path: String
content: String
type: String
size: Int
ext: String
createdAt: String
}
type Query {
folders: Folder
}
`
Run Code Online (Sandbox Code Playgroud)
旋转变压器
const resolvers = {
FolderOrFile: {
__resolveType: obj => {
if (obj.type === "file") {
return 'File'
}
if (obj.type …Run Code Online (Sandbox Code Playgroud) 我正在开发 nuxt/apollo 包,但没有有关 addTypeName 属性的信息。这个属性应该在哪里设置呢?注意:所有安装都与@nuxt/apollo 有关。(作为模块等导入)
版本信息 :
"@nuxtjs/apollo": "^4.0.0-rc8",
Run Code Online (Sandbox Code Playgroud)
我在 nuxt.config.js 中的 apollo 配置:
apollo: {
includeNodeModules: false,
authenticationType: 'Basic',
defaultOptions: {
$query: {
loadingKey: 'loading',
fetchPolicy: 'cache-and-network'
}
},
clientConfigs: {
default: {
httpEndpoint: 'DEFAULT_GRAPHQL_ENDPOINT',
tokenName: 'apollo-token' // optional
},
financial: {
httpEndpoint: 'NEWS_GRAPHQL_ENDPOINT',
tokenName: 'apollo-token',
addTypename: false --> **Is not working**
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的 Index.vue 页面是:
apollo: {
data: {
query: gql`
{
newsJson(take: 1) {
key
*GENERATES __typeName when sending request to Graphql*
}
} …Run Code Online (Sandbox Code Playgroud) 看起来可以通过取消挂起的请求client.stop(),但是当我们使用apollo client hooks没有client.
如何使用 apollo 客户端挂钩停止待处理的请求?
我有一个无头 Craft CMS,它通过 Apollo 通过 GraphQL 端点将数据返回到我的 Nuxtjs 应用程序。我有一个可以返回三种不同块类型之一的字段:richText、image和pullQuote。
我的 GraphQL 端点如下所示:
query($section:[String], $slug:[String]) {
entries(section: $section, slug: $slug) {
id,
title,
uri,
... on blog_blog_Entry{
contentEngine{
__typename,
...on contentEngine_richText_BlockType{
__typename,
id,
richText
fontColor,
backgroundColor
}
...on contentEngine_image_BlockType{
__typename,
id,
backgroundColor,
imageWidth,
image {
id,
url
}
}
...on contentEngine_pullQuote_BlockType{
__typename,
id,
backgroundColor,
fontColor,
quote
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
它返回数据很好,但是当我尝试在 Nuxt 组件中使用它时出现此错误:
您正在使用简单(启发式)片段匹配器,但您的查询包含联合或接口类型。Apollo 客户端将无法准确映射片段。要消除此错误,请使用
IntrospectionFragmentMatcher文档中所述的方法:https ://www.apollographql.com/docs/react/advanced/fragments.html#fragment-matcher
令人气愤的是,该文档导致了 404 错误。我发现了一些其他引用此链接的 …
我已经设法在 Nuxtjs 中拥有一个 Express + Apollo 后端作为服务器中间件。一切工作正常(身份验证、缓存、数据源、查询、突变),但现在我试图让订阅(websockets)运行,这给我带来了困难。
我尝试了这个示例https://www.apollographql.com/docs/apollo-server/data/subscriptions/#subscriptions-with-additional-middleware但即使让 httpServer 监听也不起作用。
这是我通过 nuxt.config.js 需要的 API 文件'~/api/index':
module.exports = async () => {
const app = require('express')()
const server = await require("./apollo")() // apollo-server-express w/ typeDefs and resolvers
// apply Apollo to Express
server.applyMiddleware({ app });
console.log(` ApolloServer ready at ${server.graphqlPath}`);
const httpServer = http.createServer(app);
server.installSubscriptionHandlers(httpServer);
console.log(` ApolloSubscriptions ready at ${server.subscriptionsPath}`);
return {
path: '/api',
handler: httpServer
}
}
Run Code Online (Sandbox Code Playgroud)
现在我的游乐场给了我这个错误:"Could not connect to websocket endpoint ws://192.168.150.98:3000/api/graphql. Please …
这是我的代码
const { loading, error, data } = useQuery(HeaderPage.query, {
fetchPolicy: "no-cache"
});
Run Code Online (Sandbox Code Playgroud)
当我使用 fetchPolicy 时:“无缓存”。多次请求也不行。
为什么只发出一次请求?
apollo ×10
graphql ×5
react-apollo ×4
nuxt.js ×3
reactjs ×2
express ×1
graphql-js ×1
javascript ×1
node.js ×1
postgresql ×1
sorting ×1
subscription ×1
typeorm ×1
typescript ×1
union ×1
vue-apollo ×1
vue.js ×1
websocket ×1