Асинхронная обработка ошибок Wrapper не работает - PullRequest
0 голосов
/ 21 мая 2019

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


1 Ответ

0 голосов
/ 21 мая 2019

fn () выполнялась правильно, нужно было передать параметры исполняющей функции: fn (req, res, next);Нравится:

module.exports = function (fn) {
    return async function(req, res, next) {
    try{
        await fn(req, res, next);
    }catch(error){
        console.log('Error happened' + error);
        res.status(500).send('Unexpected Error');
    }finally{
    }
 }
}
...