GraphQL / Prisma订阅仅对DELETE有效

时间:2018-08-17 08:09:31

标签: node.js graphql graphql-js graphql-subscriptions prisma

我已经使用Prisma建立了一个项目,用于处理与服务器之间的数据通信/存储/检索。它与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论坛上发现的所有问题都可以通过三月份的修复方式解决。我怀疑这可能与Async pyramida绑定有关,但这只是直觉。

任何帮助将不胜感激。

谢谢

A

1 个答案:

答案 0 :(得分:1)

好的,所以我经过反复尝试后解决了这个问题。似乎我遵循的初始教程使用了需要更新的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映像而不是我的pyramida npm版本。

干杯

A