簡體   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