Переместить промежуточное ПО Express в отдельные модули - PullRequest
0 голосов
/ 15 февраля 2019

У меня в экспресс-приложении много app.use(...), и они становятся грязными и сложными, и везде есть настройки.Поэтому я хочу переместить их в отдельные модули, чтобы их было проще тестировать.

Итак, у меня есть базовый класс Middleware.ts для моих промежуточных оболочек:

export default abstract class Middleware {

  public run(): express.RequestHandler {
    try {
      return this.runImpl;
    }
    catch (err) {
      log("Failed to init middleware " + err);
      throw err;
    }
  }

  public abstract runImpl(): express.RequestHandler;

}

И подкласс,например, StaticMiddleware.ts для обслуживания статических файлов:

export class StaticMiddleware extends Middleware {

  public runImp(): express.RequestHandler {
    // this is a simple example, but most middleware are more
    // complicated, but everything is encapsulated here
    return express.static("path");
  }

}

export default new StaticMiddleware().run;

Наконец, само приложение app.ts express, которое очень чисто:

import staticMiddleware from "./StaticMiddleware";
import fooMiddleware from "./FooMiddleware";
import barMiddleware from "./BarMiddleware";

app.use(staticMiddleware());
app.use(fooMiddleware());
app.use(barMiddleware());

Но я получаю ошибку во время выполнения:

TypeError: app.use () требуется функция промежуточного программного обеспечения


Обратите внимание, что можно изменить сигнатуры метода выше, поэтому я могу использовать эту форму:

app.use(staticMiddleware); 

Но это удивительно для сопровождающего и так может сломаться.Я хочу нормальную подпись:

app.use(staticMiddleware());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...