节点.js错误:发送标头后无法设置标头,有时会出现

Node.js Error: Can't set headers after they are sent, appears sometimes

本文关键字:设置 错误 js 节点      更新时间:2023-09-26

我有一个带有发布方法的HTML表单和一个帖子路由

    app.post('/',
        c_emailController.create,
        c_bookingController.create
    );

当我按提交时,我需要向我和客户发送电子邮件 [emailController],并将数据保存在我的预订集合 [bookingController] 中,但有时,当我按下提交时,会出现此错误:

Can't set headers after they are sent

最奇怪的部分是:不是每次,有时发生,有时不发生。你能检查一下我的控制器代码,看看是否有问题吗?

我相信这是下一个()的问题;。

JS小提琴-> http://jsfiddle.net/a6s7npcg/

OBS:未发生错误时代码工作

我认为问题是你通过调用 sendEmail 函数两次来调用 next 回调两次。

为避免这种情况,您可以使用async库,借助该库,您将并行发送电子邮件,并仅在发送两封电子邮件后拨打next

var async = require('async');
async.parallel({
   alertEmail: function(callback) {
       var alertEmailOptions = {
        to: "myemail@com",
        from: "myemail@com",
        subject: "[alert]",
        html: "some html",
       };
       sendgrid.send(alertEmailOptions , callback);
   }, 
   confirmEmail: function(callback) {
        var confirmationEventOptions = {
        to: req.body.email,
        from: "reserva@pubcrawlsp.com",
        subject: "Reserva -  "
        html: "SOME HTML",
        };
        sendgrid.send(confirmationEventOptions, callback);
   }
}, function (err, results) {
   next();
});