Функции высшего порядка с экспресс-маршрутами - PullRequest
0 голосов
/ 30 августа 2018

Я смотрел в блоге https://www.acuriousanimal.com/2018/02/15/express-async-middleware.html о том, как обрабатывать do await / async в экспресс-маршрутах Typescript.

Мне понравилась идея использования функций высшего порядка, чтобы избежать избыточности кода, но

  1. не уверен, как это сделать в TypeScript

  2. Есть ли другой лучший способ, который TypeScript рекомендует для такого сценария

Пример кода: https://gist.github.com/kameshsampath/e550d5bf19feb9b59d0ec1871e59b53a

1 Ответ

0 голосов
/ 30 августа 2018

Полагаю, вы хотите удалить catch из следующего кода в функцию более высокого порядка:

app.get("/api/frames", async (req: Request, res: Response, next: any) => {
  //TODO move this to higher order function
  try {
    const qCollection = await loadCollection("frames", db);
    const docs = qCollection.find();
    if (docs) {
      return res
        .contentType("json")
        .status(200)
        .send(docs);
    }
  } catch (err) {
    res.status(404).send(err);
  }
    app.get("/api/frames", async (req: Request, res: Response, next: any) => {
  //TODO move this to higher order function
  try {
    const qCollection = await loadCollection("frames", db);
    const docs = qCollection.find();
    if (docs) {
      return res
        .contentType("json")
        .status(200)
        .send(docs);
    }
  } catch (err) {
    res.status(404).send(err);
  }
});

Это делает это:

const asyncHandler = fn => (req, res, next) =>
  Promise
    .resolve(fn(req, res, next))
    .catch((err)=>res.status(404).send(err);)

app.get("/api/frames", asyncHandler(async (req: Request, res: Response, next: any) => {
    const qCollection = await loadCollection("frames", db);
    const docs = qCollection.find();
    if (docs) {
      return res
        .contentType("json")
        .status(200)
        .send(docs);
    }
 }));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...