gpt4 book ai didi

javascript - Route.get() 需要回调函数,但得到了一个 [object Promise]

转载 作者:太空宇宙 更新时间:2023-11-04 03:01:32 24 4
gpt4 key购买 nike

我正在使用express创建一个REST API,遵循this article中的架构。简而言之,路由器正在调用 Controller 。

这是一个调用示例:

router.get('/', ModelsController.getModels)

到目前为止,这项工作进展顺利,现在,我正在使用 Boom 改进错误处理。

我想使用 this article 中的包装器,但由于我不使用 TS 并且我不熟悉 Promises,所以我正在努力解决它。

这是包装器:

exports.enhanceHandler = async function (handler) {
return async function (req, res, next) {

try {
const result = await handler(req, res);
if (result instanceof Error && Boom.isBoom(result)) {
res.status(result.output.statusCode).send(formatBoomPayload(result));
}
} catch (error) {
// now log errors to your errors reporting software
if (process.env.NODE_ENV !== "production" && (error.stack || error.message)) {
res.status(500).send(error.stack || error.message);
} else {
res.status(500).send(Boom.internal().output.payload);
}
}

next();
}
}

我试图在我的路由器中调用它,如下所示:

router.get('/handler', enhanceHandler(ModelsController.getModels))

但是,我遇到了这个错误:

Error: Route.get() requires a callback function but got a [object Promise]

我能做什么?我需要兑现 promise 吗?修改enhanceHandler,使其返回一个函数而不是一个promise?

最佳答案

Handler 需要同步,但它返回的函数可以保持异步。

exports.enhanceHandler = function (handler) { // delete "async" keyword
return async function (req, res, next) {

try {
const result = await handler(req, res);
if (result instanceof Error && Boom.isBoo
..

关于javascript - Route.get() 需要回调函数,但得到了一个 [object Promise],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54745667/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com