gpt4 book ai didi

express - GraphQL 订阅、websocket、nodejs、Express session

转载 作者:行者123 更新时间:2023-12-02 17:49:32 28 4
gpt4 key购买 nike

我正在使用 Apollo Server 2(但这个问题不仅仅存在于 Apollo)和 Express.js vanilla(使用 apollo-server-express)。

Express session 机制外,订阅一切正常。

问题:

我正在使用 cookie-session ( https://github.com/expressjs/cookie-session ,但我认为这对于 express-session 中间件来说是相同的)并且当我的浏览器启动新连接时在我的服务器上,ApolloServer onConnect Hook 没有 req 属性,也没有 req.session 等等...

我能做的就是在onConnect生命周期钩子(Hook)中解析来自webSocket.upgradeReq.headers.cookie的cookie,但在我看来这很hacky。

代码:

const { ApolloServer } = require('apollo-server-express')

const typeDefs = require('../src/graphql/types')
const resolvers = require('../src/graphql/resolvers')
const models = require('../src/models')

const apolloServer = new ApolloServer({
typeDefs,
resolvers,
context: ({ req, connection }) => {
// connection exists only on webSocket connection
if (connection) {
return {
currentUser: connection.context.currentUser // <-- I NEED THIS!
}
}
// if not a (webSocket) connection it is a "default" HTTP call
return {
models,
currentUser: { id: req.user.id }
}
},
subscriptions: {
onConnect: (connectionParams, webSocket) => {
// "connectionParams" is from the client but I cannot use it because cookies are HTTP-Only
// I can retrieve cookies from here: "webSocket.upgradeReq.headers.cookie" but then I need to parse them which seems a bit hacky to me
// return { currentUser: req.user.id } // <-- I NEED THIS (req.user.id doesn't exists)!
}
}
})

module.exports = apolloServer

我在 Apollo Server Docs 网站上找不到任何内容(对于其他主题有很好的记录!)。

我哪里做错了?

最佳答案

我知道这个问题,但我自己也遇到了这个问题,我是如何解决这个问题的:我通过 session 中间件运行了 webSocket.upgradeReq.session。

enter image description here

然后在onConnect中:

enter image description here

并且您可以访问您的 session

关于express - GraphQL 订阅、websocket、nodejs、Express session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52280481/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com