問題: aws Dynamodb に保存されているセッション データを取得しようとしていますが、同じエンドポイントからサーバー レス エクスプレス アプリへの連続した呼び出しの間で、sessionID が常に変化しています。
エクスプレスコード:
app.get('/addtocart/:id', (req, res) => {
let cart;
const id = req.params.id;
const sid = req.sessionID;
Session.getItem({ "sessionId": sid }, function (data, err) {
if (!err) {
cart = new Cart(data.attrs.sess.cart);
console.log('\nTHe new cart is:\n', cart);
addToCart();
}
else {
cart = new Cart({});
addToCart();
}
})
function(){
//login to add to cart
}
}
Dynamodb ストア構成
const options = {
"table": {
"hashPrefix":'',
},
"dynamoConfig": {
"accessKeyId": process.env.AWS_ACCESS_KEY_ID,
"secretAccessKey": process.env.AWS_SECRET_ACCESS_KEY,
"region": 'ap-south-1'
},
"keepExpired":false,
};
app.use(session({
store: new DynamoDBStore(options),
secret: 'mySecret',
resave: false,
saveUninitialized: true,
cookie:{
httpOnly:true,
// expires: new Date(Date.now() + hour),
maxAge: hour
}
}));
上記のコードでは、ショッピング カートに追加するすべてのアイテムのバックエンドで '/addtocart/:id' ルートをヒットしています。フロントエンドの静的 HTML ページをポート 8080 にロードし、サーバーをポート 3000 にロードしています)
- Express アプリを aws lambda にデプロイし、dynamodb を使用してセッションを保存しています。
- ショッピング カート モジュールを構築しようとしているので、フロントエンド (s3 でホストされている静的な html ページ) のカートにアイテムを追加すると、以前のカート構成が保持され、現在のアイテムが追加されます。代わりに、新しいカートを作成してdynamoDBに保存すると、セッションIDが追加されたアイテムごとに変更され、新しいカートオブジェクトが作成され、古いカートが保持されてデータが上に追加される代わりに、セッションが再度保存されますそれの。
バックエンドから同じ addproduct ルートをヒットした場合、および Acess -Control-Allow-Originヘッダーをhttp://localhost:8080に設定した場合、カートは保持されます。
これはサーバーレス アプリなので、エンドポイントを修正できません。そのため、フロントエンドから ajax 呼び出しを実行している間、xhrCredentials オプションを true に設定していません。また、バックエンドの Orgin ヘッダーも「*」に設定されています。
カート データが dynamodb に保存されている、さまざまなユーザーからのサーブ レス ラムダ エクスプレス アプリへのさまざまな呼び出しのカート情報を保持する方法はありますか。Cookie とセッション管理に関する情報は役に立ち、私の混乱をさらに明確にします。
セッションの管理にはexpress-sessionを使用し、セッションをdbに保存するにはDynamodb-storeを使用しています