Recap
12291 ワード
今までやったことを復習して
私はただ何が起こったのか復習しているだけです.1つ目は、ここに示す
middleware
を生成する.server.js
からapp.use(
session({
secret: "Hello!",
resave: true,
saveUninitialized: true,
})
);
このmiddleware
はexpress-session
という不起なmodule
から得られたものです.この
middleware
の役割は、ブラウザがバックエンドと対話するたびに、session
、すなわちmiddleware
は、鄭州にcookie
を伝送する.では、
cookie
とは何でしょうか.cookie
はバックエンドがブラウザに提供する情報です.cookie
には一定のルールがあるので、バックエンドでrequest
を実行するたびに、ブラウザは、
request
にcookie
を追加します.だからこれのために他にやることはない
ここに示す
middleware
はブラウザにCookie
を送信し、ブラウザはcookie
を使用して何をしますか?どこに置くか知っています.また、ブラウザは毎回バックエンド
localhost
にありますURL
〜request
が送信される毎に、cookie
がrequest
と共に送信されることも知られている.では、
cookie
にはどんな情報が含まれているのでしょうか.どんな情報でも参加できます.数字をつけてもいいし、名前をつけてもいいし、どんな情報を入れてもいいです.
今置くのは
session ID
です.バックエンドへのブラウザの接続が永続的ではないためです.
http
を使用しているので、http
はstateless
です.home page
に入るとconnection
が開き、render
が終了し、connection
が切れました.connection
はずっと維持できません.例えば、
WIFI
ルータの関係から見ると、それは常にconnection
に維持されている.WiFI
ルーターは接続するとずっとつながっています.これが
WIFI
ルータと情報を交換できる理由です.しかし、ブラウザとバックエンドでは、アクティブな
connection
は1つもありません.connection
は、render
またはredirect
で終了するpost request
が送信された場合、または応答が受信されなかった場合、connection
は直ちに終了する.したがって、ユーザに
session ID
を与える.session ID
を置く場所がcookie
です.2つあり、1つは2479142で、バックエンドのフロントエンドで情報交換を行います.
もう一つは
cookie
です.したがって、session ID
は、ブラウザで見ることができる例である.チェック->アプリケーション->Cookie->ローカルホスト、すなわち
session ID
.ブラウザには
session ID
があり、session ID
が含まれています.バックエンドは現在、使用中の
cookie
を覚えています.言い換えれば、セッションIDとクッキーは2つの異なる概念である。
session
は情報を交換する方法にすぎない.cookie
は自動処理されているので、本当にいいです.cookie
を受信および送信する過程で、ユーザは何もしなくてもよいし、個別のコードを記述する必要もない.cookie
の基準に従っているからです.これはhttp
です.もう1つは
cookie
であり、session ID
に格納されている.日立
cookie
はcookie
を転送するために使用されているからです.違いますいずれにしても、
session ID
はsession ID
内に格納され、ここの後端にも格納されることに重点を置いている.バックエンドは、使用されている
cookie
をすべて維持します.ここでいくつかの問題があります.その決定は次の部分で議論される.
バックエンドは、生成されたすべての
session ID
を管理する.4人のユーザがいれば、
session ID
は4人のsession store
である.今sessionについて話しましょう。
session store
はsession store
を貯蔵する場所です.コードを保存するたびにサーバが再起動されます.session
が消えます.これはテストのためのリポジトリだからです.コードを再保存すると、サーバは再起動し、
session store
も再起動します.したがって、現在の
session store
は無効になります.リフレッシュすると、新しい
cookie
が入ります.全く違うcookie
だからです.次のセクションでは、このセクションを修正して、
cookie
とcookie store
を接続します.ホームページでリフレッシュすると、同じ
cookie store
がもらえます.バックエンドは
MongoDB
にcookie
が格納されているからである.したがって、
session store
とsession Id
は異なる.session
を使用して、どのブラウザのcookie
かを知ることができます.次に、ユーザーがログインすると、
cookie
で発生します.session ID
にいくつかの情報を追加します.これは非常に重要な部分です.usercontrller
ブラウザは秘密モードとは違います.したがって、req.session
はブラウザによって異なるように見えます.パッと見る例えば、ここに
req.session
とreq.session
がある場合req.session
からexport const localsMiddleware = (req, res, next) => {
console.log(req.sessionID);
res.locals.loggedIn = Boolean(req.session.loggedIn);
res.locals.siteName = "Wetube";
res.locals.loggedInUser = req.session.user;
next();
};
違うものが見えます.Secretモードのconsole.log
と通常モードのmiddlewares.js
が異なることがわかる.JFYtvxHaSl5Nr4drpZoV2i4N2uip_1OA
GET / 304 165.473 ms - -
xcJGg-kLwAvYybcdLp_MljPPy4purDYJ
GET / 304 43.062 ms - -
異なるsession ID
を持っています.したがって、同じコードでも、異なるブラウザで異なる結果が生成されます.だから、私が言ったように、ブラウザごとに異なる
session ID
があるので、session ID
に追加されました.これは
req.session
なので、req.session object
はobject
なので、欲しいものを追加することができます.ここでは、ユーザー登録時に
session
をobject
に設定する2つのオプションが追加されています.loggedIn
から req.session.loggedIn = true;
req.session.user = user;
return res.redirect("/");
};
true
で見つけたユーザデータをuserController.js
に入れる.現在
DB
件に入っています.したがって、user
はどこでも使用できます.これは
req.session
の中にあるからです.次に
req.session.user
を追加し、controller
を変数とした.req.session
から body
header
h1=pageTitle
nav
ul
li
a(href="/") Home
if loggedIn
li
a(href="/logout") Log Out
li
a(href="/my-profile") #{loggedInUser.name} Profile
else
li
a(href="/join") Join
li
a(href="/login") Login
この変数にはloggedInUser.name
はありません.loggedIn
を実行しても、この変数は送信されません.base.pug
を作ったからです今renderについて話しましょう。
render function
は何でもできるlocalsMilddelware
です.locals
からexport const localsMiddleware = (req, res, next) => {
res.locals.loggedIn = Boolean(req.session.loggedIn);
res.locals.siteName = "Wetube";
res.locals.loggedInUser = req.session.user;
next();
};
追加することも削除することもできますが、このlocals
には欲しいものを入れることができます.また、
object
はmiddlewares.js
に近いと確信できる.object
およびtemplate
に設定されています.したがって、ここで見た3つのものを
locals object
に入れると、どこからでもpug
に近づくことができます.express
またはlocals object
は必要ありません.pug template
の中に入れておけば、import
で使えます.Reference
この問題について(Recap), 我々は、より多くの情報をここで見つけました https://velog.io/@0_cyberlover_0/Recapテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol