Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Apollo GraphQL v3订阅返回空值_Node.js_Graphql_Apollo Server_Graphql Subscriptions - Fatal编程技术网

Node.js Apollo GraphQL v3订阅返回空值

Node.js Apollo GraphQL v3订阅返回空值,node.js,graphql,apollo-server,graphql-subscriptions,Node.js,Graphql,Apollo Server,Graphql Subscriptions,我在apollo服务器上设置订阅非常困难。它在听,我可以进行变异并查询结果。但是,相同数据的订阅每次都返回null。以下是我的代码的重要部分: import { Storage } from "@google-cloud/storage" import { createError } from "apollo-errors" import { ApolloServer, gql, PubSubEngine } from "apollo-serve

我在apollo服务器上设置订阅非常困难。它在听,我可以进行变异并查询结果。但是,相同数据的订阅每次都返回null。以下是我的代码的重要部分:

import { Storage } from "@google-cloud/storage"
import { createError } from "apollo-errors"
import { ApolloServer, gql, PubSubEngine } from "apollo-server-express"
import { PubSub } from "apollo-server"
import cors from "cors"
import express from "express"
import jwt from "express-jwt"
import jwksRsa from "jwks-rsa"
import neo4j from "neo4j-driver"
import { initializeDatabase } from "./initialize"
import { typeDefs } from "./schema.js"
import { createServer } from "HTTP"

const pubsub = new PubSub()
const app = express()

const messages = []

const resolvers = {
    Mutation: {
        postMessage(parent, { user, content }, context) {
            const id = messages.length
            messages.push({
                id,
                user,
                content,
            })
            pubsub.publish("test", {
                messages,
            })
            return id
        },
    },
    Query: {
        messages: () => messages,
    },
    Subscription: {
        messages: {
            subscribe: (parent, args, context) => {
                return pubsub.asyncIterator("test")
            },
        },
    },
}

const neoSchema = new Neo4jGraphQL({
    typeDefs,
    resolvers,
    config: {
        jwt: {
            secret: process.env.NEO4J_GRAPHQL_JWT_SECRET,
        },
    },
    debug: true,
})

const NEO4J_USER = process.env.NEO4J_USER
const NEO4J_PASS = process.env.NEO4J_PASS
const NEO4J_URI = process.env.NEO4J_URI

const driver = neo4j.driver(NEO4J_URI, neo4j.auth.basic(NEO4J_USER, NEO4J_PASS))

const init = async (driver) => {
    await initializeDatabase(driver)
}

try {
    init(driver).catch((e) => console.log(e))
    console.log("ne4j initialized...")
} catch (error) {
    console.error(`Failed to property initialize database`, error)
}

const apolloServer = new ApolloServer({
    schema: neoSchema.schema,
    context: ({ req }) => {
        return {
            driver,
            pubsub,
            req,
        }
    },
    subscriptions: {
        onConnect: async (connectionParams, webSocket, context) => {
            console.log("xxx")
            console.log(connectionParams)
        },
        onDisconnect: (websocket, context) => {
            console.log("WS Disconnected!")
        },
        path: "/graph",
    },
    introspection: true,
    playground: true,
})

apolloServer.applyMiddleware({ app, path: "/graph" })

const httpServer = createServer(app)
apolloServer.installSubscriptionHandlers(httpServer)
const port = process.env.PORT || 8080

httpServer.listen({ port }, () => {
    console.log(`Server is ready at http://localhost:${port}${apolloServer.graphqlPath}`)
    console.log(`Subscriptions ready at ws://localhost:${port}${apolloServer.subscriptionsPath}`)
})
根据我的模式:

export const typeDefs = gql`
    type Message {
        id: ID!
        user: String!
        content: String!
    }
    type Query {
        messages: [Message!]
    }
    type Subscription {
        messages: [Message!]
    }
    type Mutation {
        postMessage(user: String!, content: String!): ID!
    }
`
如果我在postMessage上执行一个变异,然后查询消息,我就会得到预期的数据。但是,当我从客户端运行订阅时,我得到

{
  "data": {
    "messages": null
  }
}

这里发生了什么事?我错过了什么?我的服务器设置中是否缺少某些内容?我的pubsub和订阅代码是否已关闭?

我不确定,但没有必要将订阅命名为“测试”?我通过
nest.js使用了
apollo服务器
,它工作得很好。