【问题标题】:Error handling middleware thenables nodejs express错误处理中间件 thenables nodejs express
【发布时间】:2020-09-17 05:18:41
【问题描述】:

所以我有这个错误处理程序中间件

class ErrorHandler extends Error {
    constructor(statusCode, message) {
        super();
        this.statusCode = statusCode;
        this.message = message;
    }
}

const handleError = (err, res) => {
    const { statusCode, message } = err;
        res.status(statusCode).json({
            status: "error",
            statusCode,
            message: "resource not found"
        });
};

module.exports = {
    ErrorHandler,
    handleError
}

在 index.js 中调用它

app.use((err, req, res, next) => {
    handleError(err, res);
})

我想在我的所有方法中使用它,但我不知道如何将它与 catch 一起使用。对我来说似乎不是很清楚。对于 404 错误工作得很好,但如果我试图抛出 500 错误,例如一个 ReferenceError 我不知道如何使用我的函数。

exports.getAll = function(req, res, next) {
    User.find({})
        .exec()
        .then(users => {
            if (users.length === 0) {
                throw new ErrorHandler(404, "No users found");
            } else {
                res.json(users);
                next;
            }
         })
        .catch(error => {
            res.status(500).send({
                message: "Error finding users",
                error: error
            })
        })
};

在 .catch 中我想像在 .then 中那样使用我的错误处理程序

【问题讨论】:

    标签: express mongoose error-handling middleware


    【解决方案1】:

    在 catch 块中,您可以使用 next 来处理错误,例如 next(err)

    .catch(err=>{
      let error = new ErrorHandler(500,"Error finding users");
      next(error);
    })
    

    【讨论】:

    • 我忘了你改变它,如果,它无论如何都不起作用。我之前在 catch 块中尝试过你的方法,但它不起作用
    • UnhandledPromiseRejectionWarning: 错误:没有用户发现它在该行给出此错误
    • @ValentinaBarna 您可以查看此链接以了解错误处理expressjs.com/en/guide/error-handling.html.I 已将 catch 块替换为上述链接中提到的方法。请检查一下。
    • 我想我现在已经修好了。添加了 let error = new ErrorHandler(404, "No users found");下一个(错误);在 if 块中。谢谢
    猜你喜欢
    • 2016-09-14
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 2022-06-20
    • 2015-02-15
    • 2012-02-22
    • 1970-01-01
    • 2016-10-08
    相关资源
    最近更新 更多