【问题标题】:Async Error handling Wrapper does not work异步错误处理包装器不起作用
【发布时间】:2019-05-21 13:23:20
【问题描述】:

我正在尝试为快速回调函数 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{
        }
     }
    }


【问题讨论】:

    标签: javascript node.js express async-await


    【解决方案1】:

    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{
        }
     }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-03
      • 1970-01-01
      • 2023-03-05
      • 2016-03-30
      • 2018-07-13
      • 1970-01-01
      • 2019-09-17
      • 2018-10-07
      相关资源
      最近更新 更多