Я пытаюсь написать оболочку для функции экспресс-обратного вызова 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{
}
}
}