我正在使用expressjs和express-session以及nodejs中的redis-connect存储来实现基于会话的服务,并且对会话存储进行并发修改时遇到问题。查找以下问题示例:
这里的问题是:如果在执行op1的过程中多次执行op2,则request.session.op2Calls值只会丢失。我应该如何实现会话存储以永不丢失值?
谢谢!
答案 0 :(得分:0)
在发出请求时,正在从商店(在您的情况下为redis商店)中读取Express会话(request.session
)。
让请求执行任务,然后然后修改会话并将其保存回商店,实际上将保存已充斥着更新属性的 read 会话。
您可以采取的措施是在保存之前重新加载会话:
app.get( "/op2", function( req, res, next ) {
someReallyLongAsyncTask( function() {
req.session.reload(function(err) {
if ( !req.session.op2Call ) { req.session.op2Call = 0; }
req.session.op2Call++;
req.session.save( function() {
res.json( { success: true } )
} );
} );
} );
} );
这样,您将确保在保存之前重新读取会话。