使用 Express-GraphQL 的 GraphQL 订阅

Posted

技术标签:

【中文标题】使用 Express-GraphQL 的 GraphQL 订阅【英文标题】:GraphQL Subscriptions using Express-GraphQL 【发布时间】:2020-11-17 22:32:12 【问题描述】:

谁能告诉我如何在 Node 中使用 Express-GraphQL 实现 GraphQL 订阅

【问题讨论】:

【参考方案1】:

我一直在研究同样的问题。

我已经阅读了express-graphql 订阅的 GitHub 问题,并且该仓库的成员建议在结束评论中使用 graphql-ws

这是我的 GitHub 项目 shammelburg/express-graphql-api 的链接,您可以 npm start 加载 grapiql 以测试查询和变异。

为了测试订阅,我创建了一个 Angular 项目,它实现了 graphql-ws 的 observables 示例。 shammelburg/graphql-rxjs-angular

Angular 项目还使用graphql-request 进行查询和突变。

这是一个非常轻量级的解决方案,效果很好。

【讨论】:

【参考方案2】:

我也遇到了同样的问题。我无法在文档中找到明确的解决方案。所以我刚刚改用graphql-yoga。但我确实找到了这个帖子,所以do check it out

【讨论】:

【参考方案3】:

见Authentication and Express Middleware

var express = require('express');
var graphqlHTTP = require('express-graphql');
var  buildSchema  = require('graphql');

var schema = buildSchema(`
  type Query 
    ip: String
  
`);

const loggingMiddleware = (req, res, next) => 
  console.log('ip:', req.ip);
  next();


var root = 
  ip: function (args, request) 
    return request.ip;
  
;

var app = express();
app.use(loggingMiddleware);
app.use('/graphql', graphqlHTTP(
  schema: schema,
  rootValue: root,
  graphiql: true,
));
app.listen(4000);
console.log('Running a GraphQL API server at localhost:4000/graphql');

【讨论】:

以上是关于使用 Express-GraphQL 的 GraphQL 订阅的主要内容,如果未能解决你的问题,请参考以下文章