使用 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 订阅的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 express-graphql 引发多个错误?

Graphql 突变查询不适用于 express-graphql

Express-graphql“在运行突变和查询时无法使用 mongodb 读取未定义的属性‘集合’”

Express-GraphQL 上的多个过滤器

节点 express-graphql 应用程序中使用的 Prisma 2 DateTime 字段

使用 express-graphql 和 HTTP 客户端从 graphql 获取数据