在这种情况下,我试图为快速回调函数 displayUsers()写一个包装器,它将附加错误处理逻辑以避免在各处使用try catch。
主要问题是fn()实际上在被router.get调用之前执行 我不确定为什么要在函数中返回而不执行它。
///Userroute.js
var router = require('express').Router();
var userModel = require('../models/user');
var asyncErrorHandler = require('../helpers/asyncErrorHandler');
var viewsDir = '../views/';
// get users from model
var displayUsers = async function(req, res, next) {
var users = await userModel.getUsers();
console.log(users);
res.render(`${viewsDir}/users.hbs`, {users:users})
};
var safeDisplayUsersfn = asyncErrorHandler(displayUsers);
router.get('/', safeDisplayUsersfn);
//asyncErrorHandler.js
module.exports = function (fn) {
return async function(req, res) {
try{
await fn();
}catch(error){
console.log('Error happened' + error);
res.status(500).send('Unexpected Error');
}finally{
}
}
}
答案 0 :(得分:0)
fn()正确执行,需要做的是将参数传递给执行函数:fn(req,res,next);喜欢:
4 0 0 0