使用 WebSocket 的原始 javascript GraphQL 订阅不起作用
Posted
技术标签:
【中文标题】使用 WebSocket 的原始 javascript GraphQL 订阅不起作用【英文标题】:Raw javascript GraphQL subscription with WebSocket not working 【发布时间】:2020-01-19 14:44:13 【问题描述】:我正在尝试创建一段原始代码来侦听 graphQL 订阅,但由于某些原因我无法使其工作。
我正在尝试模仿从 GraphQL 控制台发送的原始请求,您可以在此处看到
看起来很简单。所以我做了以下javascript代码:
const WebSocket = require("ws");
const connection = new WebSocket("ws://localhost:4000/graphql")
connection.onopen = () =>
console.log("connection open")
let init = JSON.stringify(type:"connection_init",payload:Authorization:"Bearer eyJhbG.....HIDDEN....dDgw")
let listen = JSON.stringify("id":"1","type":"start","payload":"variables":,"extensions":,"operationName":null,"query":"subscription \n followJob(idJob: \"ck0pa2r8r8pit0b17f3k6s729\") \n progress\n \n\n")
connection.send(init)
connection.send(listen)
connection.onmessage = e =>
console.log("data coming")
console.log(e.data)
connection.onerror = e =>
console.log(e)
(function wait ()
setTimeout(wait, 1000000);
)();
GraphQL 服务器确实收到了请求,并且具有与控制台发出的请求完全相同的消息数据,但由于某些原因,此后它不会处理查询,也不会在日志中抛出任何错误或消息。 .
你知道我可能会错过什么吗?
非常感谢您的帮助。
【问题讨论】:
【参考方案1】:只需要像这样指定 websocket 协议
const connection = new WebSocket("ws://localhost:4000/graphql","graphql-ws")
【讨论】:
以上是关于使用 WebSocket 的原始 javascript GraphQL 订阅不起作用的主要内容,如果未能解决你的问题,请参考以下文章
即使不涉及 Web 浏览器,也可以在原始 tcp 上使用 websocket:好主意吗?
Flash 中的 WebSocket 与原始 TCP 套接字