2017-09-27 11 views
0

私のKoa 2ミドルウェアからvar値を取得しようとしています。これは私のpugテンプレート(またはその他)に表示されます。私が持っているKOA-セッションでたとえば :ミドルウェアからKoaのビューへの値を渡す2

app.use(ctx => { 
    // ignore favicon 
    if (ctx.path === '/favicon.ico') return; 

    let n = ctx.session.views || 0; 
    ctx.session.views = ++n; // how can I use this? 
    ctx.body = n + ' views'; // works, but in body directly 
    ctx.state.views = n + ' views'; // not working 
}); 

別の例として、応答時間:元の命令を1として

app.use(async (ctx, next) => { 
    const start = Date.now(); 
    ctx.state.start = start 
    await next(); 
    const ms = Date.now() - start; 
    console.log(`${ctx.method} ${ctx.url} - ${ms}ms`); // this shows response 
    ctx.state.ms = await ms>0 // I have no idea what I'm doing :) 
}); 

これは動作しますが、代わりに体/コンソールを使用しての、私はしたいと思いますテンプレート変数として使用するので、私のルータ/コントローラでは次のようになります。

... 
return ctx.render("posts/index", { 
    title: 'Posts', 
    posts: posts, 
    ms: ctx.state.ms, 
    views: ctx.session.views // or views: ctx.state.views 
}); 

これはどれも動作しません。それはasync/awaitに関連しているので、時間内に値を取得しないか、構文上の問題ですか?私はこれで新しいですように穏やかにしてください。 :)

答えて

0

"セッション"ミドルウェアで "応答時間"の例と同じようにnext()を呼び出す必要があります。そのような

:私はconsole.log出力はここに渡された結果よりもやや異なるように思えるが、

app.use((ctx, next) => { 
let n = ctx.session.views || 0; 
    ctx.session.views = ++n; 
    next(); 
}); 

app.use(ctx => { 
    ctx.body = 'Hello ' + ctx.session.views; 
    // or you can return rendering result here 
}); 

は、詳細情報については、そのドキュメントのCascadingセクション

+0

感謝を見てみましょう。さて、それは十分だと思います:) – Encho

+0

私の答えにはconsole.logはありません:)あなたはどういう意味ですか?あなたが見たいと思っているもの、そしてあなたのconsole.logの実際の出力は何ですか? –

+0

申し訳ありませんが私は十分に明確ではなかった - 私はあなたの答えを使用して、質問の2番目の例として、私のページの速度負荷varのコードを変換していた。 console.log( '$ {ctx.method} $ {ctx.url} - $ {ms} ms');私がページに出力した結果とは異なる結果をもたらします。 – Encho

関連する問題