0

問題: 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を使用しています

4

0 に答える 0