环境: 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也没有作为参数显式传入。