1

环境: Node.js,Express

Mongoose 的创建者和主要维护者 Valeri Karpov 构建了一个简单且广泛使用的异步包装器,用于捕获错误并将其转发到默认的 Express 错误处理程序。

你可以在这里阅读他的错误处理程序,快速错误处理的 80/20 指南

这是他使用的模式。

function wrapAsync(wrappedRoute) {

  return function(req, res, next) {

    wrappedRoute(req, res, next).catch(next);

  };

}

wrapAsync用于包装这样的异步路由,

exports.homePage = wrapAsync(async function(req, res) {
    
    let myVariable = await accessSomethingRemote();

    res.render('homepage', { myVariable });

});

wrapAsync下面引用的行内非常有意义。异步函数返回一个 Promise,并且.catch()可以添加到 Promise 中以捕获错误。 next将错误转发到默认的 Express 错误处理程序。

wrappedRoute(req, res, next).catch(next);

但是我不完全理解它上面的线的机制。

return function(req, res, next) {

问:从哪里来req, res, next的?它们没有在内部声明,wrapAsync也没有作为参数显式传入。

4

1 回答 1

1

function(req, res, next)是回调函数。它应该在其他地方被调用,而不是在这个片段中。在 Express 的情况下,它由 Express 本身根据带有相应参数的请求调用,req, res, next.

于 2020-11-06T01:09:20.963 回答