subscriptionsClient.subscribe不是函数

时间:2019-04-18 07:47:53

标签: graphql graphql-js express-graphql graphql-subscriptions

在这种情况下,我只是尝试使用graphql-subscriptions运行虚拟订阅,然后将其集成到我的代码中。 但是,即使有最小的示例。

我正在关注scotch.io示例,这是其git链接 https://github.com/kimobrian/GraphQL-Express/tree/subscriptions

它在graphiql的订阅上引发错误

subscriptionsClient.subscribe不是函数

注意:我什至没有从单独的客户端尝试它。我只希望服务器具有包含查询,变异和订阅的架构,并且希望在不同窗口的graphiql中运行订阅时能实时看到魔术。

根据网上的一些建议,我什至将subscription-transport-ws版本从0.9降级到0.8.3

我正在运行查询和变异,但是订阅在Graphiql中引发了上述错误

服务器文件

 # Find the .JPG pattern and catch the picture name ("(.*\).JPG") and add "the last line before" that contain "/Sp*" and reput the .JPG pattern with the picture name:
 sed 's/\(.*\).JPG/"the last line before" that contain "/Sp*""\1.JPG/' list.txt > list2.txt
 sed -e 's/\:/\//g' list2.txt > list3.txt

package.json

import express from 'express';
import {
  graphqlExpress,
  graphiqlExpress,
} from 'graphql-server-express';
import bodyParser from 'body-parser';
import cors from 'cors';

import { schema } from './src/schema';

import { execute, subscribe } from 'graphql';
import { createServer } from 'http';
import { SubscriptionServer } from 'subscriptions-transport-ws';

const PORT = 7900;
const server = express();

server.use('*', cors({ origin: 'http://localhost:3000' }));

server.use('/graphql', bodyParser.json(), graphqlExpress({
  schema
}));

server.use('/graphiql', graphiqlExpress({
  endpointURL: '/graphql',
  subscriptionsEndpoint: `ws://localhost:${PORT}/subscriptions`
}));

// We wrap the express server so that we can attach the WebSocket for subscriptions
const ws = createServer(server);

ws.listen(PORT, () => {
  console.log(`GraphQL Server is now running on http://localhost:${PORT}`);

  // Set up the WebSocket for handling GraphQL subscriptions
  new SubscriptionServer({
    execute,
    subscribe,
    schema
  }, {
    server: ws,
    path: '/subscriptions',
  });
});

模式

{
  "name": "tutorial-server",
  "version": "1.0.0",
  "description": "A simple GraphQL server",
  "main": "server.js",
  "scripts": {
    "start": "nodemon ./server.js --exec babel-node -e js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "MIT",
  "devDependencies": {
    "babel-cli": "^6.24.0",
    "babel-preset-es2015": "^6.24.0",
    "babel-preset-stage-0": "^6.22.0",
    "nodemon": "^1.11.0"
  },
  "dependencies": {
    "body-parser": "^1.17.1",
    "cors": "^2.8.3",
    "express": "^4.15.2",
    "graphql": "^0.11.3",
    "graphql-server-express": "^1.1.2",
    "graphql-subscriptions": "^0.5.1",
    "graphql-tools": "^1.2.3",
    "subscriptions-transport-ws": "0.8.3"
  }
}

解析器

import {
  makeExecutableSchema
} from 'graphql-tools';

import { resolvers } from './resolvers';

const typeDefs = `
type Channel {
  id: ID!                # "!" denotes a required field
  name: String
}

type Message {
  id: ID!
  text: String
}

# This type specifies the entry points into our API
type Query {
  channels: [Channel]    # "[]" means this is a list of channels
  channel(id: ID!): Channel
}

# The mutation root type, used to define all mutations
type Mutation {
  addChannel(name: String!): Channel
}

# The subscription root type, specifying what we can subscribe to
type Subscription {
    channelAdded: Channel
}
`;

const schema = makeExecutableSchema({ typeDefs, resolvers });
export { schema };

我希望当pubsub.publish被点击时,它应该在订阅窗口中更新

0 个答案:

没有答案