ログインしたユーザーを探して、その情報をapp.locals
に設定して、どのビューでも使用できるようにします。Mongooseで.findOneを使用してapp.localsを使用する方法
私はそうのような私server.js
ファイルでそれを設定してい:
app.use(ensureAuthenticated, function(req, res, next) {
User.findOne({ _id: req.session.passport.user }, (err, user) => {
console.log('user\n', user)
app.locals.logged_in_user = user;
next();
})
});
console.log('user\n', user)
は、ユーザーが発見されたことを確認します。それは働いていない、
Currently, {{logged_in_user}} is logged in.
しかし: その後、私はそのようなので、私のようlayout.hbs
ファイルのように、いずれかの部分で、このユーザーの情報を使用することができるはずです。回答hereは代わりにres.locals
を使用するように提案されましたが、それはうまくいきませんでした。例hereは静的なデータを使用していますが、user
はログインしている人に依存するため、動的なデータが必要です。
現在、すべてのルートでuser
変数を定義する必要があります。どの部分的にでも使用できる変数user
をグローバルに定義する方法はありますか?
'res.locals'は動的情報を追加するための正しいオブジェクトであり、' app.locals'はstatic(set once)情報のみです。ミドルウェアは、テンプレートをレンダリングするルートの前に宣言されていますか?これらのルートの中で、 'res.render()'を呼び出す直前に、 'res.locals.logged_in_user'の値は何ですか? – robertklep
私は 'ensureAuthenticated'を取り出して動作しました。しかし、返信いただきありがとうございます! – Farid
まだ、 'app.locals'は使わないでください。または、そうしている場合は、常時1人のアクティブユーザーしかいないことを期待してください。 – robertklep