【发布时间】:2021-05-07 01:51:21
【问题描述】:
为了使代码更轻量级和可读性,我想出了为快速路由器创建一个简单的装饰器的想法。
发件人:
itemRouter
.get('/:item_id', async (req, res, next) => {
try {
const id = parseInt(req.params.item_id)
const item = await itemController.getItemById(id)
res.status(StatusCodes.OK).send(item)
} catch (error) {
next(error)
}
})
接近这个最终结果:
itemRouter
.get('/:item_id',
expressDecorator(async (req, res, next) => {
const id = parseInt(req.params.item_id)
return itemController.getItemById(id)
})
})
function expressDecorator(wrapped) {
return function () {
const { req, res, next } = arguments
try {
const { statusCode, bodyResponse } = wrapped.apply(this, arguments)
res.status(statusCode).send(bodyResponse)
} catch (error) {
next(error)
}
}
}
但我错过了一些东西,因为它根本不起作用。这是什么?
PS : 我完全知道有一个 express-router-decorator npm 包,但我希望自己进行实验以了解它是如何工作的。
【问题讨论】:
-
你确定包装结果解构到这个状态/响应?
-
其实我不是,我是被这篇文章启发的,但我没有得到所有的东西:sitepoint.com/javascript-decorators-what-they-are
标签: javascript node.js express decorator router