【问题标题】:Extend parameters of already defined method扩展已定义方法的参数
【发布时间】:2022-01-16 07:03:10
【问题描述】:

我正在编写一个 Koa Web 服务器,并且想知道是否可以向 Koa.app 对象上已定义的方法添加另一个参数。

  const mongoState = await connectToDatabase();

  app.use(async (ctx, next) => {
    ctx.state.mongoState = mongoState;
    await next();
  });

所以在这种情况下,mongoState 是我在 app.use(() => {}) 闭包中分配给 ctx.state.mongoState 对象的局部变量。

但我想在其他地方编写中间件逻辑并在 app.use() 中调用它,例如:app.use(dbInjector) 或其他东西。问题是我需要将该 mongoState 局部变量传递给 app.use() 中的闭包。但是我不能定义一个函数,它接受更多参数然后(ctx, next)app.use()

我是这样想的:

app.use(dbInjector(mongoState));

`in a different file`
export const dbInjector = async (ctx, next, mongoState) => ...etc... {}

但这显然行不通。 Koa 的 app.use() 只会自动注入 ctx 和 next,但我正在尝试添加另一个参数。

另外我不知道这种情况的正确术语,app.use() 方法只会自动将两个 ctx, next 参数传递给 .use() 内部的函数,我不确定它是如何工作的,或者那叫什么?

【问题讨论】:

    标签: node.js typescript express koa


    【解决方案1】:

    您不需要添加额外的参数。 app.use 想要一个函数作为第一个参数。因此,您可以创建一个函数,该函数返回要在 app.use 中使用的所需函数。

    const dbInjector = (mongoState) => {
      return async (ctx, next) => {
        ctx.state.mongoState = mongoState;
        await next();
      };
    };
    

    现在你可以在 app.use 中使用它了:

    app.use(dbInjector(mongoState));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-24
      • 2016-02-13
      • 1970-01-01
      • 1970-01-01
      • 2014-03-25
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      相关资源
      最近更新 更多