我试图从我的Koa 2中间件获取var值以显示在我的哈巴狗模板(或其他)中。 例如,我在koa-sessions中有:
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 :)
});
根据原始指令,这是有效的,但我不想使用body / console,而是想将它用作模板变量,所以在我的路由器/控制器中我会:
...
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 :(得分:0)
您需要在“会话”中间件中调用next()
,方法与“响应时间”示例相同。
就像那样:
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部分