【问题标题】:How to enforce dependencies between middlewares in Koa?如何在 Koa 中强制执行中间件之间的依赖关系?
【发布时间】:2020-12-30 23:19:30
【问题描述】:

我的应用中有一些中间件:

  • loggedInUserHandler:加载当前用户并将其保存在上下文中
  • notificationHandler:从上下文中获取当前用户。然后加载该用户的通知并将它们保存到上下文中。
  • routeHandler:从上下文中获取当前用户和通知,并将其加载到正确的视图中。

基本上每个中间件都可能依赖于以前的中间件生成并附加到上下文的数据。现在,我只是按正确的顺序加载中间件,如下所示:

app.use(loggedInUserHandler);
app.use(notificationHandler);
app.use(routeHandler);

但是我想知道是否有更好的方法来做到这一点,或者声明每个中间件的依赖关系?然后,如果以错误的顺序调用它们,则会抛出错误或类似的东西。我在 Koa 中找不到太多关于此的信息,所以我想知道是否有适当的方法来做到这一点。有什么建议吗?

【问题讨论】:

  • 我最初的想法是创建一个包含这些函数的数组,然后像这样在 app.use 中传递该数组:app.use(async ctx => loadUserNotifications.map(fn => fn.call(ctx))) 但是这些函数不会是严格意义上的 koa 中间件

标签: dependencies middleware koa


【解决方案1】:

如果你想调用下一个中间件,你可以使用 next() 函数。
在koa中,需要异步调用next函数,等待它完成。

例如。

// 1st middleware
app.use(async(a, next) => {
  .
  .
  .

  // Call next middleware and wait for it to complete
  await next()
})

// 2nd middleware
app.use(async(a) => {
  .
  .
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-20
    • 2010-09-14
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多