【问题标题】:Unhandled promise rejection: Cannot set headers after they are sent to the client未处理的承诺拒绝:在将标头发送到客户端后无法设置标头
【发布时间】:2018-11-07 17:10:42
【问题描述】:

我不知道为什么这个错误不断出现。我在互联网上搜索了所有可能的解决方案,但仍然没有找到。这是我用于 API 调用的节点函数。

exports.GetEmployeeConfirmationList = function (req, res) {
    var request = dbConn.request();
    request.execute(storedProcedures.GetEmployeeConfirmationList).then(function (response) {
        res.status(200).send({
            success: true,
            data: response.recordset
        });
    }).catch(function (err) {
        res.status(200).send({
            success: false,
            message: err.message
        });
    });
};

如何克服这个问题? 提前致谢。

【问题讨论】:

    标签: node.js angular api express header


    【解决方案1】:

    修改您的代码以使用箭头函数,因为res 对象正在失去其作用域。 当GetEmployeeConfirmationList 回调被调用时,它不知道res 对象,因此它不知道undefined。因此,在执行res.status 时,它会引发异常并进入catch 块,在那里它再次执行res.status 并再次中断并导致未处理的承诺拒绝。 您可以在finally 块中捕获err 对象和log 以检查它是否正在发生。

    exports.GetEmployeeConfirmationList = function (req, res) {
        var request = dbConn.request();
        request.execute(storedProcedures.GetEmployeeConfirmationList).then((response) => {
            res.status(200).send({
                success: true,
                data: response.recordset
            });
        }).catch((err) => {
            res.status(200).send({
                success: false,
                message: err.message
            });
        });
    };
    

    【讨论】:

    • 感谢小伙伴快速解决,真的很有帮助。
    猜你喜欢
    • 2021-06-03
    • 2017-12-20
    • 2018-01-04
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多