我想以表格格式通过邮件发送回复。
在邮件选项html中,我声明res.json(streamingTemplate)==
并返回以下错误:
就像我得到的......
Unhandled rejection Error: Can't set headers after they are sent. at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:356:11) at ServerResponse.header
var sendStreamingTemplate = function (req, res) {
authToken = req.headers.authorization;
userAuthObj = JSON.parse(UserAuthServices.userAuthTokenValidator(authToken));
var todayDate = new Date();
var expireDate = new Date(userAuthObj.expire_date);
tokenOK = TokenValidator.validateToken(userAuthObj.user_id, authToken).then(function (userSessions) {
if (userSessions.length === 1) {
if (expireDate >= todayDate) {
StreamingTemplateId = req.params.id;
TemplateController.findById(StreamingTemplateId).then(function (streamingTemplate) {
if (streamingTemplate === null) {
res.status(404).json({
message: 'Streaming not found...'
})
} else {
console.log(streamingTemplate);
let transporter = nodemailer.createTransport({
host: 'smtp.zoho.com',
port: 465,
auth: true,
active: true,
secure: true,
requireTLS: true,
auth: {
user: 'aaaaaaa@domain.com',
pass: 'yyyyyyyy'
}
});
let mailOptions = {
from: 'aaaaaaa@domain.com',
to: 'bbbbbbbbb@domain.com',
subject: 'mail notification Test',
text: 'Hello !!!!!!!!!everything works fine',
html:res.json(streamingTemplate)// i want to send whatever response get i will send to through mail in table format
};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log("mail not sent" +error.message);
}
console.log('success');
});
switch(streamingTemplate.template_name.toString().toLowerCase()){
case "stream":
res.json(streamingTemplate);
break;
case "broadcaster":
res.json(streamingTemplate);
break;
case "product":
res.json(streamingTemplate);
break;
default:
res.json(streamingTemplate);
break;
}
}
}).catch(function (err) {
res.status(500).json({
message: 'something went wrong...'
});
});
} else {
res.status(401).json({
message: 'Not Authorized...'
});
}
} else {
res.status(401).json({
message: 'Token Expired...'
});
}
}).catch(function (err) {
res.status(401).json({
message: 'Token Expired...'
});
});
};
答案 0 :(得分:0)
res.json()方法是一个终端方法,它结束写入其中指定的json的响应。因此,在配置 mailOptions 时,不应使用它。
let mailOptions = {
from: 'aaaaaaa@domain.com',
to: 'bbbbbbbbb@domain.com',
subject: 'mail notification Test',
text: 'Hello !!!!!!!!!everything works fine',
html: res.json(streamingTemplate) // Response should not be sent here
};
相反,应将streamingTemplate传递给 mailOptions 的 html 参数。
let mailOptions = {
from: 'aaaaaaa@domain.com',
to: 'bbbbbbbbb@domain.com',
subject: 'mail notification Test',
text: 'Hello !!!!!!!!!everything works fine',
html: streamingTemplate // set the template here
};