首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Koa 2中将值从中间件传递到视图

在Koa 2中将值从中间件传递到视图
EN

Stack Overflow用户
提问于 2017-09-27 17:42:49
回答 1查看 1.1K关注 0票数 1

我正在尝试从我的Koa2中间件中获取var值,以显示在我的pug模板(或其他模板)中。例如,在koa-session中,我有:

代码语言:javascript
复制
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
});

另一个例子是响应时间:

代码语言:javascript
复制
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,因此在我的路由器/控制器中,我将具有:

代码语言:javascript
复制
...
return ctx.render("posts/index", {
  title: 'Posts',
  posts: posts,
  ms: ctx.state.ms,
  views: ctx.session.views // or views: ctx.state.views
});

这些都不管用。它是否与async/await有关,因此它不能及时获得值,或者是一些语法问题?因为我是新手,所以请温文点。:)

EN

回答 1

Stack Overflow用户

发布于 2017-09-27 23:07:50

您需要在“会话”中间件中调用next(),方法与“响应时间”示例中的方法相同。

就像这样:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46444577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档