Я пытаюсь получить значение var из моего промежуточного программного обеспечения Koa 2 для отображения в моем шаблоне pug (или другом). Например, в коа-сессиях у меня есть:
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
});
Другой пример со временем отклика:
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
});
Ничего из этого не работает. Это связано с асинхронностью/ожиданием, поэтому оно не получает значение вовремя или это какая-то синтаксическая проблема? Пожалуйста, будьте нежны, так как я новичок в этом. :)