我正在看一个博客https://www.acuriousanimal.com/2018/02/15/express-async-middleware.html,该博客介绍如何处理Typescript Express路由中的等待/异步操作。
我喜欢使用高阶函数来避免代码冗余的想法,但是
我不确定如何在TypeScript中进行操作
TypeScript针对这种情况还有其他更好的建议
示例代码段: https://gist.github.com/kameshsampath/e550d5bf19feb9b59d0ec1871e59b53a
答案 0 :(得分:0)
我相信您希望将以下代码中的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);
}
}));