2017-09-27 92 views
0

내 Koug 2 미들웨어에서 var 값을 가져 와서 내 pug 템플릿 (또는 기타)에 표시하려고합니다.미들웨어에서 Koa보기로 값 전달

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 :) 
}); 

으로이 작품 원래의 명령어 당, 대신에 몸/콘솔을 사용하여, 나는 싶습니다 : 응답 시간,

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 
}); 

또 다른 예 : 은 KOA-세션의 예를 들어 내가 가진 템플릿 변수로 사용하십시오. 따라서 라우터/컨트롤러에서 다음과 같이 나타납니다.

... 
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

죄송합니다. 충분히 분명한 것은 아닙니다. 귀하의 답변을 사용하고 질문에서 두 번째 예와 같이 내 페이지 속도 var에 대한 코드를 변환했습니다. console.log ('$ {ctx.method} $ {ctx.url} - $ {ms} ms'); 내가 페이지에 출력 한 결과와 다른 결과를 생성합니다. – Encho