扩展已定义方法的参数

Extend parameters of already defined method

我正在编写一个 Koa 网络服务器,想知道是否可以向 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) for 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() 中的函数,我不确定它是如何工作的,或者那叫什么?

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

中使用的函数
const dbInjector = (mongoState) => {
  return async (ctx, next) => {
    ctx.state.mongoState = mongoState;
    await next();
  };
};

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

app.use(dbInjector(mongoState));