Express.JS を使用して静的コンテンツを提供します。
express.use(express.static('./../'));
が提供されたらindex.html
、ユーザーがサインインしているかどうかを示す応答と一緒に Cookie を送信したいと思います。通常は使用する必要がありますres.cookie()
が、静的に提供されるコンテンツに使用する方法がわかりません。
Express.JS を使用して静的コンテンツを提供します。
express.use(express.static('./../'));
が提供されたらindex.html
、ユーザーがサインインしているかどうかを示す応答と一緒に Cookie を送信したいと思います。通常は使用する必要がありますres.cookie()
が、静的に提供されるコンテンツに使用する方法がわかりません。
なぜこれを行う必要があるのか はわかりませんが、static
モジュールの前に独自のミドルウェアを配置できます。
次のクイックハックが機能するはずです。
function attach_cookie(url, cookie, value) {
return function(req, res, next) {
if (req.url == url) {
res.cookie(cookie, value);
}
next();
}
}
app.configure(function(){
app.use(attach_cookie('/index.html', 'mycookie', 'value'));
app.use(express.static(path.join(__dirname, 'public')));
});
上記は、ミドルウェアの前に、ミドルウェア Express の使用のチェーンに別の関数を挿入しstatic
ます。URL が探している特定の URL と一致する場合、新しいレイヤーは Cookie を応答に添付し、チェーンのさらに下に応答を渡します。
次のアプローチも検討してください。
Express が Web サーバーの背後にある場合、Express を気にせずに静的ファイルを提供できます。ミドルウェア経由よりも高速なはずです。nginx を使用している場合は、Nginx Reverse Proxying to Node.js with Rewriteが役に立ちます。
静的ファイルに JavaScript が含まれていると仮定すると、この Cookie に必要なデータのみを明示的に要求するだけで、クライアント側で Cookie を直接設定することもできます。
document.cookie = "user_id=" + user_id;
Flanagan の JS 決定版ガイド (第 6 版!) には、クライアント側の JavaScript で Cookie を使用する方法が詳しく説明されています ( JavaScript の書籍の中で最高のものであることに加えて:)。
些細なアドバイスかもしれませんが、私は次のフローを見てきました (複数回): クライアントが API リクエストを送信し (これには明らかに Cookie が添付されています)、サーバーは Cookie からデータを取得し、このクッキーに含まれるデータ。クライアントでこの Cookie を静かに読み取るのではなく、これらすべてを行います。基本的に、クライアントはサーバーに独自の Cookie に何が含まれているかを尋ねます。
あなたのシナリオでは、user_id/access_key を 1 回だけ要求してから、常にクライアントの Cookie をチェックし、クライアントがまだ持っていないデータについてのみサーバーにアクセスする必要がありますが、セッション状態を保存してチェックし、おそらくいくつかのコンパクトほとんどのページで使用されるデータ (ユーザー名など) をローカルの Cookie に保存します (データをローカル ストレージにキャッシュして、サーバーの負荷をさらに軽減することもできます)。この場合、express は、ユーザーが誤ってページを更新したかどうかさえ認識できません (もちろん、アプリケーションの状態を反映するように URL を変更しない場合、または # 部分のみを変更した場合)。