繁体   English   中英

与apollo服务器的Websocket连接返回connectionparams的乱码

[英]Websocket connection with apollo-server returns gibberish for connectionParams

onConnect应接收客户端提供的connectionParams ,然后通过检查connectionParams对象上的token属性来验证令牌尚未过期。 在客户端上,我将按以下方式发送这些参数:

const subOptions = {
  reconnect: true,
  connectionParams: async () => {
    let token = await get("token")
    let ret = {
      token,
    }

    console.log("WEBSOCKET RETURN OBJECT", ret)

    return ret
  },
}

const subClient = new SubscriptionClient(subEndpoint, subOptions)
const subLink = new WebSocketLink(subClient)

在客户端上:

在此处输入图片说明

扰乱“ ON CONNECT”之后打印的对象,并显示如下。 如何以这种格式来自客户端? 如何进一步调试?

在服务器上:

在此处输入图片说明

const ws = createServer(app)

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,
      onConnect: (connectionParams, webSocket) => {
        let req = {}

        console.log("ON CONNECT")
        console.log(connectionParams)

        return checkToken(connectionParams.token, function(payload) {
          return {
            user: {
              id: payload.userId,
              exp: payload.exp,
              iat: payload.iat,
            },
          }
        })
      },
    },
    {
      server: ws,
      path: "/subscriptions",
    }
  )
})

您目前无法对connectionParams使用异步功能。

这是一种解决方法:

const wsLink = new WebSocketLink({
  uri: wsUri,
  options: {
    reconnect: true,
  },
});
wsLink.subscriptionClient.use([{
  async applyMiddleware(options, next) {
    const token = await getLoginToken();
    options.context = { token };
    next();
  },
}]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM