onConnect
应接收客户端提供的 connectionParams
,然后通过检查 connectionParams
对象上的 token
属性来验证 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();
},
}]);
关于javascript - 与 apollo-server 的 Websocket 连接返回乱码的 connectionParams,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48656299/