Упрощение Express API Возвращаемое значение - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть такой код:


export const updateItem = (
  req: express.Request,
  res: express.Response,
  next: express.NextFunction
) => {
  const updatedItem: ItemUpdate = req.swagger.params.body.value;

  updateItemWithId(updatedItem, Item)
    .then((updatedItem) =>
      res
        .status(statusCodes.OK)
        .json({
          item: updatedItem,
        })
        .end()
    )
    .catch(next);
};

export async function getItems(
  req: express.Request,
  res: express.Response,
  next: express.NextFunction
): Promise<void> {
  const { params } = req.swagger;

  const relationshipItemOptions: item.GetItemOptions = {
    id: params.id.value,
    item_id: params.item_id.value,
    item_type: params.item_type.value,
    start_at: params.start_at.value,
    max_results: params.max_results.value,
  };

  item
    .getItems(itemOptions)
    .then((filteredItems) =>
      res
        .status(statusCodes.OK)
        .json({
          items: filteredItems,
        })
        .end()
    )
    .catch(next);
}

Где я повторяю этот лог c для каждой сущности в моей БД. Есть ли способ сделать этот более общий / элегантный способ, где я могу взять req, res, затем asyn c функцию и вернуть результат с помощью указанной клавиши Json?


export const returnJson = <T extends object>(
    req: express.Request,
    res: express.Response,
    next: express.NextFunction, 
    asyncFunction: () => Promise<T>,
    jsonKey: string
    ) => {
        asyncFunction()
        .then((returnValue) =>
        res
          .status(statusCodes.OK)
          .json({
              jsonKey: returnValue
          })
        )
          .catch(next);
 }

Я вижу, что у меня могла бы быть только одна функция, которая имеет все эти параметры в качестве параметров, но я не уверен, что это будет лучшим способом. Есть ли лучший способ сделать это с помощью функции curry sh?

Спасибо за помощь.

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