问题描述
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]
}
`
subscription MySubscription {
userAdded{
user {
id
username
}
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)