Postgraphile订阅不适用于Express

问题描述

TL:DR:当我的数据库获取新值时,我想在后端(节点,使用graphQL表示)中触发该值,并将其发送给使用 Postgraphile

的FE(react和graphQL)

我正在将node js与express一起使用,并在BE端使用postgresql。因此,我使用节点js配置数据库,并使用GraphQL进行查询。所以我想要更新实时数据,例如每当数据库更新时,我都希望将数据发送到用reactJS构建的FE。到目前为止,我已经执行了该实现,但是没有成功。有人可以帮我吗?我想念什么?

BE代码

index.js

const dbUrl = `postgres://${user}:${pass}@${host}:${port}/${dbname}`;
console.log("\nPostgres origin URL for connection:\n",dbUrl);

app.use(
  postgraphile(dbUrl,"public",{
    pluginHook,ignoreRBAC: true,extendedErrors: ["errcode","detail","hint"],graphiql: true,subscriptions: true,simpleSubscriptions: true,graphqlRoute: "/v2/api/testing",graphiqlRoute: "/v2/api/testing-i",appendplugins: [makeExtendSchemaPlugin(
        build => {
            const { pgsql: sql } = build;

            return {
                typeDefs,resolvers : {
                    Query: {
                        getAdditionalData: async (_query,args,context,resolveInfo) => {
                            let userId = 1
                            return {rank: 50}
                        }
                    },Subscription: {
                        userAdded: {
                        },},Mutation: {
                        userAdded(root,context) {
                          pubsub.publish(USER_ADDED,{ userAdded: args });
                        },userRank: {
                        user: async (_query,resolveInfo) => {
                            console.log("here")
                            let userId = 2
                          const rows = await resolveInfo.graphile.selectGraphQLResultFromTable(
                            sql.fragment`users`,(tableAlias,queryBuilder) => {
                            }
                          );
                          return rows;
                        }
                    }
                }
            }
        })]
  }),);
var server = app.listen(process.env.PORT || 2000,function() {
  console.log("postgraphile API running on port:",server.address().port);
});

我的架构文件

const typeDefs = gql`
    extend type Query {
        getAdditionalData(q: String): userRank
        channels: [Channel]    # "[]" means this is a list of channels
      channel(id: ID!): Channel
    }
    extend type Subscription {
        userAdded: userRank @pgSubscription(topic: "hello")
        listen(topic: String!): ListenPayload!
    }
    type userRank{
        user: [User]
    }
`

当我尝试运行此查询但它给我提供null作为输出时,

subscription MySubscription {
  userAdded{
    user {
      id
      username
    }
  }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)