【问题标题】:Cannot set headers after they are sent to the client - Sendgrid将标头发送到客户端后无法设置标头-Sendgrid
【发布时间】:2020-05-31 14:38:41
【问题描述】:

我有一个问题。我正在尝试编写一个后端,该后端从客户端站点获取请求,而服务器响应是一封电子邮件。我还想将数据保存在数据库中。基本上我在客户端站点上有一个表单,我只想保存数据并通过电子邮件将数据发送给用户。奇怪的是,它正在工作,但我也得到了这个答案:

»发送到客户端后无法设置标头«

有人能告诉我为什么会这样吗?

const Briefing = require("../models/briefing");
const sgMail = require("@sendgrid/mail");
sgMail.setApiKey(process.env.EMAIL_API_KEY);

exports.briefing = (req, res) => {
  const {
    gender,
    age,
    income,
  } = req.body;

  let newBriefing = new Briefing({
    gender,
    age,
    income,
  });

  newBriefing.save((err, success) => {
    if (err) {
      console.log("ERROR CREATING BRIEFING", err);
      return res.status(400).json({
        error: err,
      });
    }
    res.json({
      message: "Briefing successfull created",
    });
  });

  const emailData = {
    to: process.env.EMAIL_TO,
    from: process.env.EMAIL_FROM,
    subject: `Briefing`,
    text: "Eine Aufstellung des erstellten Briefings",
    html: `
        <h1>Das Briefing</h1>
        <p>Vielen dank, dass du dir die Zeit genommen hast dieses Briefing zu erstellen.</p>
        <p>Hier vorab die Daten:</p>
        <p>${gender}</p>
        <p>${age}</p>
        <p>${income}</p>
        <p>desweiteren befindet sich im anhang eine PDF</p>
      `,
  };

  sgMail
    .send(emailData)
    .then((send) => {
      console.log("SIGNUP EMAIL SEND", send);
      return res.json({
        message: `Email has been sent to social@moritzwright.com follow the instruction to activate your account.`,
      });
    })
    .catch((err) => {
      console.log("EMAIL SENDING ERROR", err);
      console.error(err.response.body);
    });
};

【问题讨论】:

  • 一个http响应只能响应一次。如果您想向客户端推送持续更新,则必须设置套接字连接。

标签: node.js mongodb email mongoose sendgrid


【解决方案1】:

我已经解决了在if语句之后采取发送电子邮件的过程的问题,如下所示:

const Briefing = require("../models/briefing");
const sgMail = require("@sendgrid/mail");
sgMail.setApiKey(process.env.EMAIL_API_KEY);

exports.briefing = (req, res) => {
  const {
    gender,
    age,
    income,
  });

  newBriefing.save((err, success) => {
    if (err) {
      console.log("ERROR CREATING BRIEFING", err);
      return res.status(400).json({
        error: err,
      });
    }
    const emailData = {
      to: process.env.EMAIL_TO,
      from: process.env.EMAIL_FROM,
      subject: `Briefing`,
      text: "Eine Aufstellung des erstellten Briefings",
      html: `
            <h1>Das Briefing</h1>
            <p>Vielen dank, dass du dir die Zeit genommen hast dieses Briefing zu erstellen.</p>
            <p>Hier vorab die Daten:</p>
            <p>${gender}</p>
            <p>${age}</p>
            <p>${income}</p>
            <p>desweiteren befindet sich im anhang eine PDF</p>
          `,
    };

    sgMail
      .send(emailData)
      .then((send) => {
        console.log("SIGNUP EMAIL SEND", send);
        return res.json({
          message: `Email has been sent to social@moritzwright.com follow the instruction to activate your account.`,
        });
      })
      .catch((err) => {
        console.log("EMAIL SENDING ERROR", err);
        console.error(err.response.body);
      });
  });
};

【讨论】:

    猜你喜欢
    • 2021-06-18
    • 2022-01-14
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 2019-10-20
    相关资源
    最近更新 更多