我有一个带有 post 方法和 post 路由的 HTML 表单
app.post('/',
c_emailController.create,
c_bookingController.create
);
当我按下提交时,我需要向我和客户端 [emailController] 发送一封电子邮件,并将数据保存在我的预订集合 [bookingController] 中,但有时,当我按下提交时,会出现此错误:
Can't set headers after they are sent
最奇怪的部分是:不是每次,有时会发生,有时不会。你能检查一下我的 Controller 代码,看看是否有问题吗?
我认为这是 next(); 的问题。
JS FIDDLE -> http://jsfiddle.net/a6s7npcg/
OBS:未发生错误时代码正在运行
最佳答案
我认为问题在于您通过两次调用 sendEmail
函数来调用两次 next
回调。
要避免这种情况,您可以使用 async
图书馆,您将借助它发送 parallel 中的电子邮件并且仅在两封电子邮件都发送后才调用 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();
});
关于javascript - 有时会出现 Node.js 错误 : Can't set headers after they are sent,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28075128/