将expressjs应用程序迁移到无服务器-快速会话问题

问题描述 投票:0回答:2

我们实现了一个典型的express应用程序(它主要是一个rest api,但其中还包含其他一些逻辑,例如passport-js登录流程和会话管理)。现在,使用AWS Lambdas将其迁移到无服务器。原始的Express应用程序使用express-session软件包来维护以postgres为商店的会话信息。现在已将应用程序部署到AWS-第一个请求有效,然后第二个请求因内部服务器错误而失败。我们很难找出原因。这不是超时。我们尝试使用postgres,DynamoDB和内存设置快速会话-仍然无法使其正常工作。为什么会这样?对于无服务器应用程序,会话管理的推荐解决方案是什么?

express session serverless
2个回答
1
投票

一种解决方案是使用JSON令牌。会话直接存储在客户端。

理论上,在第一次连接时,您为会话设置了令牌,并将其发送给客户端。

[每次用户调用Api时,您都会发送JSON令牌。在服务器端,用所需的数据填充它(它是一个对象)...并将其再次发送给客户端...

[此过程有很多实现,并且使用JWT:

https://serverless.com/blog/strategies-implementing-user-authentication-serverless-applications/https://ponyfoo.com/articles/json-web-tokens-vs-session-cookies....


0
投票

会话管理在无状态,无服务器的环境中根本不同。

由于您尚未共享产生错误的代码,所以我只能笼统地说。通用方法是将任何状态信息存储在数据库中,并在操作需要知道该状态时轮询数据库。或者,您可以在该数据库节点中使用侦听器来检测更改并将这些更改传播到前端。

要解决您的错误-再次假设,因为没有代码可用-如果您已将Express应用迁移到无服务器+数据库,并且第一个请求成功,但是第二个请求失败,则可能是错误处理承诺或函数与DB之间的异步流中的某个位置。

我将查看https://levelup.gitconnected.com/avoiding-the-pitfalls-of-async-node-js-functions-in-aws-lambda-941220582e7a,并在访问数据库之前和之后的各个地方放置一些console.log语句,以查看您是否正在获取所需的实际数据,或者尚未解决的承诺。祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.