У меня есть такой код:
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?
Спасибо за помощь.