[解決済み】expressフレームワークを使用したnode jsでクッキーを設定するにはどうすればよいですか?
2022-04-09 02:31:04
質問
私のアプリケーションでは、expressフレームワークを使用してクッキーを設定する必要があります。以下のコードを試しましたが、クッキーを設定することができません。
var express = require('express'), http = require('http');
var app = express();
app.configure(function(){
app.use(express.cookieParser());
app.use(express.static(__dirname + '/public'));
app.use(function (req, res) {
var randomNumber=Math.random().toString();
randomNumber=randomNumber.substring(2,randomNumber.length);
res.cookie('cokkieName',randomNumber, { maxAge: 900000, httpOnly: true })
console.log('cookie have created successfully');
});
});
var server = http.createServer(app);
var io = require('socket.io').listen(server);
server.listen(5555);
解決方法は?
Expressではミドルウェアの使用順序が重要です。先に宣言されたミドルウェアが先に呼び出され、そのミドルウェアがリクエストを処理できる場合は、後に宣言されたミドルウェアは呼び出されません。
もし
express.static
がリクエストを処理している場合、ミドルウェアを上に移動する必要があります。
// need cookieParser middleware before we can do anything with cookies
app.use(express.cookieParser());
// set a cookie
app.use(function (req, res, next) {
// check if client sent cookie
var cookie = req.cookies.cookieName;
if (cookie === undefined) {
// no: set a new cookie
var randomNumber=Math.random().toString();
randomNumber=randomNumber.substring(2,randomNumber.length);
res.cookie('cookieName',randomNumber, { maxAge: 900000, httpOnly: true });
console.log('cookie created successfully');
} else {
// yes, cookie was already present
console.log('cookie exists', cookie);
}
next(); // <-- important!
});
// let static middleware do its job
app.use(express.static(__dirname + '/public'));
また、ミドルウェアには
どちらかというと
レスポンスを返して)リクエストを終了させるか、次のミドルウェアにリクエストを渡します。この場合、私は後者のために
next()
が設定されたとき、Cookieが設定されます。
更新情報
現在のところ、Cookie パーサーは別の npm パッケージになっています。
app.use(express.cookieParser());
を使用して別途インストールする必要があります。
npm i cookie-parser
として、使用することができます。
const cookieParser = require('cookie-parser');
app.use(cookieParser());
関連
-
[解決済み】AWS STS AssumeRoleへのアクセスを可能にする方法
-
[解決済み】モジュール '@babel/core' が見つかりません。
-
[解決済み] Passport JSのreq.isAuthenticated()はどのように実装されていますか?[クローズド]
-
[解決済み] joiライブラリを使用して2つの時間を比較する方法
-
[解決済み] Heroku "状態が起動から停止に変更されました SIGTERMで全プロセスを停止"
-
[解決済み] E: npm パッケージを見つけることができません。
-
[解決済み] ランタイム 'node' が PATH で見つからない - Visual Studio Code と Node.js
-
[解決済み] jQueryでクッキーを設定/解除するにはどうすればよいですか?
-
[解決済み] NVMを使用して、デフォルトのノードバージョンを設定するにはどうすればよいですか?
-
[解決済み] nodeやExpressを使用してJSONを返す正しい方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Node.js getaddrinfo ENOTFOUND
-
[解決済み】Node.jsのエラーECONNRESETをデバッグするにはどうすればよいですか?
-
[解決済み】Express.js req.bodyが未定義です。
-
[解決済み】Heroku + node.jsのエラー(Webプロセスが起動後60秒以内に$PORTにバインドできなかった)。
-
[解決済み] MongoDB でコレクションを日付順に並べるには?
-
[解決済み] npm install エラー - ローカルの発行者証明書を取得できません。
-
[解決済み] Heroku "状態が起動から停止に変更されました SIGTERMで全プロセスを停止"
-
[解決済み] express は `body-parser deprecated undefined extended` としてエラーを投げます。
-
[解決済み] ランタイム 'node' が PATH で見つからない - Visual Studio Code と Node.js
-
[解決済み] ノードのバージョンを管理するためのnまたはnvm - 各バージョンのグローバルモジュールを保持することは良いアイデアですか?