异步错误处理包装程序不起作用

时间:2019-05-21 03:55:24

标签: javascript node.js express async-await

在这种情况下,我试图为快速回调函数 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 :(得分:0)

fn()正确执行,需要做的是将参数传递给执行函数:fn(req,res,next);喜欢:

4            0        0        0