我正在撰寫一個 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... {}
但這顯然行不通。Koaapp.use()只會自動注入 ctx 和 next,但我正在嘗試添加另一個引數。
另外我不知道這種情況的正確術語,app.use() 方法只會自動將兩個 ctx, next 引數傳遞給 .use() 內部的函式,我不確定它是如何作業的,或者那是什么叫?
uj5u.com熱心網友回復:
您不需要添加額外的引數。app.use 想要一個函式作為第一個引數。因此,您可以創建一個函式,該函式回傳要在 app.use 中使用的所需函式。
const dbInjector = (mongoState) => {
return async (ctx, next) => {
ctx.state.mongoState = mongoState;
await next();
};
};
現在您可以在 app.use 中使用它:
app.use(dbInjector(mongoState));
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/411559.html
標籤:
