2016-07-18 4 views
0

基本的には、ルートに変数を渡そうとしているので、ページがロードされるときにセッション値から更新されます。しかし、私は正しい方法を理解することはできません。私はいくつかの方法を試しましたが、この最新の方法ではres.sender行にエラーが発生します。変数infoはエラーを引き起こしています。 "typeError:Object is not function"ルートに渡されたセッション変数データを取得する方法を理解するres.sender関数

req.session変数をres.senderに取得してルートページでそのコンテンツにアクセスできるようにするには、適切な構文はどのように見えますか?私はノードに慣れていないし、表現しているし、正しい方法を理解できないようだ。特急にまで読む

router.get('/add-rounds', function (req, res) {  

// create needed game session variables 
req.session.player = req.session.user.email; 

if (!req.session.round) { 
    req.session.round = 1; 
    req.session.roundTotal = 0; 
    req.session.achievedMastery = false; 
    console.log('initialized session variables'); 
} 

console.log(req.session.round); 
// console.log(res.locals.round); 
console.log(req.session.achievedMastery); 

info = req.session;  

res.render('add-rounds.jade', {csrfToken: req.csrfToken() }, info); 
functions.updateRound; 
}); 

答えて

1

方法http://expressjs.com/en/api.html#app.render

をレンダリングするあなたは、あなたのように、あなたは(第二引数で)ビューの変数の一部として情報変数を送信する必要がありますレンダリングのコールバックを実行するために期待していない限り表示

res.render('add-rounds.jade', {csrfToken: req.csrfToken(), info: req.session}); 

私は、FULLセッションをビューに送信することは悪い習慣であることを指摘したいと思います。 App.localsは、この情報を入力してアクセスするのに適しています。

また、レンダリングメソッドでファイル拡張子を参照する必要はありません。ビューがviewディレクトリの一番上にある限り、単に「add-rounds」で十分です。私はあなたのプロジェクトがどのように見えるかわかりません。

また、私はあなたのupdateRound関数をrenderメソッドの上に置きます。

ジェイドビューで新しく渡されたセッション変数にアクセスするには、情報キーを使用してアクセスしてください。例えば、

p= info.achievedMastery 

通常、ビューオブジェクトが変数を累積するようになると、引数の外側でそれを構築することができます。たとえば、

var data = { 
    acheivedMaster: req.session.achievedMastery, 
    round: req.session.round, 
    roundTotal: req.session.roundTotal 
} 
    //Now lets render the view and pass the data 
    return res.render('add-rounds', data); 
+0

回答は100%正しいです。私はこれを自分で見つけましたが、それは最良の答えですので、あなたがそれに答える時間を取ったので、私はそれを選ぶでしょう。祝福。データ変数についてのトリック+1。私はそれが好きです :-) –

関連する問題