GraphQL/Prisma 订阅仅针对 DELETE 触发
GraphQL/Prisma Subscriptions only fire for DELETE
我已经使用 Prisma 建立了一个项目来处理进出服务器的 communication/storage/retrieval 数据。它与这里 example 本质上是相同的架构。唯一的主要区别是我的解析器没有分成不同的文件,它们都驻留在 index.js.
现在,我正在尝试实施订阅,这将捕获对我的模型所做的所有更改。但是对于我来说,除了 DELETE 操作之外,我无法订阅任何东西。我已阅读多个论坛帖子和示例,但问题仍然存在。
我的 index.js 订阅解析器如下所示:
Subscription: {
userChanges: {
subscribe: (_, args, context, info) => {
console.log("CHECKCHECK");
return context.prisma.subscription.user(
{ where: { mutation_in: ['CREATED'] } },
info
)
}
},
taskChanges: {
subscribe: async (_, args, context, info) => {
return await context.prisma.subscription.task({}, info)
}
}
}
我的 schema.graphql 看起来像这样:
# import Task, User from '../generated/prisma.graphql'
# import TaskSubscriptionPayload, UserSubscriptionPayload from '../generated/prisma.graphql'
type Query {
task(id: ID!): Task
tasks: [Task]!
user(id: ID!): User
users: [User!]
getUserTasks(id:ID!): [Task]!
}
type Mutation {
addTask(
name: String!,
priority: Float!,
weight: Int!,
best: Float!,
expected: Float!,
worst: Float!,
calculated: Float!,
stdDev: Float!,
actualTime: Float,
tags: [String!]!,
ownedBy: ID!
): Task!
updateTask(
id: ID!,
name: String!,
priority: Float!,
weight: Int!,
best: Float!,
expected: Float!,
worst: Float!,
calculated: Float!,
stdDev: Float!,
actualTime: Float,
tags: [String!]!,
ownedBy: ID!
): Task!
deleteTask(id: ID!): Task!
addNewUser(name: String!): User!
deleteUser(id:ID!): User!
}
type Subscription {
taskChanges: TaskSubscriptionPayload
userChanges: UserSubscriptionPayload
}
我一定是遗漏了一些东西,因为我在 Prisma 论坛上发现的 any/all 问题早在 3 月份就已经通过修复解决了。我怀疑这可能与 Async Prisma 绑定有关,但这只是直觉。
如有任何帮助,我们将不胜感激。
谢谢,
一个
好的,所以我在反复试验后修复了这个问题。似乎我遵循的初始教程使用了需要更新的 primsagraphql/prisma 图像的旧版本。
要解决此问题,请执行以下操作:
用更新的版本编辑你的 docker-compose.yml(对我来说,我从 1.12 升级到 1.14)
services:
prisma:
image: prismagraphql/prisma:1.14
使您的 docker 映像脱机,然后重新部署它们。对我来说,我很乐意使用以下命令完全杀死它们,但是如果您想保存数据,您可能需要找到一组不同的命令来执行此操作。
docker-compose kill
docker-compose down
docker-compose up -d
让您新部署的 Docker 图像预热一下。由于某种原因,我需要几秒钟才能醒来:P。之后您应该会发现您的订阅将按预期再次工作。
希望这对其他人有帮助,我真的花了一段时间才弄清楚我需要更新我的 Docker 图像而不是我的 prisma npm 版本。
干杯,
一个
我已经使用 Prisma 建立了一个项目来处理进出服务器的 communication/storage/retrieval 数据。它与这里 example 本质上是相同的架构。唯一的主要区别是我的解析器没有分成不同的文件,它们都驻留在 index.js.
现在,我正在尝试实施订阅,这将捕获对我的模型所做的所有更改。但是对于我来说,除了 DELETE 操作之外,我无法订阅任何东西。我已阅读多个论坛帖子和示例,但问题仍然存在。
我的 index.js 订阅解析器如下所示:
Subscription: {
userChanges: {
subscribe: (_, args, context, info) => {
console.log("CHECKCHECK");
return context.prisma.subscription.user(
{ where: { mutation_in: ['CREATED'] } },
info
)
}
},
taskChanges: {
subscribe: async (_, args, context, info) => {
return await context.prisma.subscription.task({}, info)
}
}
}
我的 schema.graphql 看起来像这样:
# import Task, User from '../generated/prisma.graphql'
# import TaskSubscriptionPayload, UserSubscriptionPayload from '../generated/prisma.graphql'
type Query {
task(id: ID!): Task
tasks: [Task]!
user(id: ID!): User
users: [User!]
getUserTasks(id:ID!): [Task]!
}
type Mutation {
addTask(
name: String!,
priority: Float!,
weight: Int!,
best: Float!,
expected: Float!,
worst: Float!,
calculated: Float!,
stdDev: Float!,
actualTime: Float,
tags: [String!]!,
ownedBy: ID!
): Task!
updateTask(
id: ID!,
name: String!,
priority: Float!,
weight: Int!,
best: Float!,
expected: Float!,
worst: Float!,
calculated: Float!,
stdDev: Float!,
actualTime: Float,
tags: [String!]!,
ownedBy: ID!
): Task!
deleteTask(id: ID!): Task!
addNewUser(name: String!): User!
deleteUser(id:ID!): User!
}
type Subscription {
taskChanges: TaskSubscriptionPayload
userChanges: UserSubscriptionPayload
}
我一定是遗漏了一些东西,因为我在 Prisma 论坛上发现的 any/all 问题早在 3 月份就已经通过修复解决了。我怀疑这可能与 Async Prisma 绑定有关,但这只是直觉。
如有任何帮助,我们将不胜感激。
谢谢,
一个
好的,所以我在反复试验后修复了这个问题。似乎我遵循的初始教程使用了需要更新的 primsagraphql/prisma 图像的旧版本。
要解决此问题,请执行以下操作:
用更新的版本编辑你的 docker-compose.yml(对我来说,我从 1.12 升级到 1.14)
services: prisma: image: prismagraphql/prisma:1.14
使您的 docker 映像脱机,然后重新部署它们。对我来说,我很乐意使用以下命令完全杀死它们,但是如果您想保存数据,您可能需要找到一组不同的命令来执行此操作。
docker-compose kill docker-compose down docker-compose up -d
让您新部署的 Docker 图像预热一下。由于某种原因,我需要几秒钟才能醒来:P。之后您应该会发现您的订阅将按预期再次工作。
希望这对其他人有帮助,我真的花了一段时间才弄清楚我需要更新我的 Docker 图像而不是我的 prisma npm 版本。
干杯,
一个