javascript - 错误: Can't set headers after they are sent - Correctly handling an error in an express controller

标签 javascript node.js express

我对以下代码有疑问。当发生错误时,将执行 if 语句并调用 res.send。但是,代码随后会继续执行下面的 res.json 调用。这会导致 header 错误。

使用 else 语句是执行此操作的唯一正确方法吗?我认为调用 res.send 会中断该函数。

exports.new = function (req, res) {
    let team = new Team();
    team.name = req.body.name;
    team.description = req.body.description;
    team.members = [];

    // save the team and check for errors
    team.save(function (err) {
        if (err) {
            res.status(400).send(err);
        }

        res.status(200).json({
            message: 'Team successfully created',
            team: team
        });
    });
};

我还尝试过使用 req、res、next 作为函数参数并使用以下方法:

if (err) {
    res.status(400);
    next(err);
}

res.status(200).json({
    message: 'Team successfully created',
    team: team
});

虽然这不会引发错误,但它仍然会继续调用最终的 res.status.json (导致 200,而不是 400 响应)

最佳答案

调用 res.end 后无法发送响应,这是在调用 res.send 函数时由express内部完成的

在您的情况下,只需在出现错误时添加return

if (err) {
    return res.status(400).send(err);
}

关于javascript - 错误: Can't set headers after they are sent - Correctly handling an error in an express controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56416862/

相关文章:

javascript - 是否有任何语法可以向 eslint-disable-line 注释添加附加信息?

javascript - 搜索并放大散点图点(Highcharts、react.js)

php - Jquery/Javascript 倒计时与 mysql 和 php 日期时间 Y-m-d H :s:m

express - 在 API(Vue.js、express.js)上使用 get 时出错

javascript - Nodejs Express 从本地目录上传文件

javascript - 向 Javascript 对象添加属性

css - 将 src 路径 backgroundImage 从 url 更改为文件夹 CSS ReactJS

javascript - 在 promise 中得到 Express 回复?

javascript - Node.js 和 Nodemailer : Can we attached PDF documents to emails?

node.js - 在 Mongoose 预中间件中,我如何访问更新查询?