扩展已定义方法的参数
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));
我正在编写一个 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));