错误将标头发送到客户端后无法设置标头

时间:2020-02-18 21:14:48

标签: node.js express mongoose amazon-ses

尝试注册用户并向用户发送电子邮件以进行验证,但似乎有多个响应会导致问题。

这是我从快递服务器收到的错误

_http_outgoing.js:485
    throw new ERR_HTTP_HEADERS_SENT('set');
    ^

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

当我注释掉我认为是导致错误的部分时,它消失了,但是我从chrome控制台获得了500状态。

这是当我获得500状态时我的代码的样子

module.exports.register = function(req, res) {
  const user = new User();

  user.name = req.body.name;
  user.email = req.body.email;

  user.setPassword(req.body.password);

  user.save(function(err) {
    if (err) {
      console.error(err);
      return console.log("Something went wrong");
    }

    // Create a JWT for the user
    let token = user.generateJwt();
    // res.status(200);
    // res.json({
    //   token: token
    // });

    // Create an email verification token for this user
    const validToken = new Token({
      _userId: user._id,
      token: crypto.randomBytes(16).toString("hex")
    });

    validToken.save(err => {
      if (err) {
        return res.status(500).send({ msg: err.message });
      }
      let transporter = nodemailer.createTransport({
        SES: new aws.SES({ apiVersion: "2010-12-01" })
      });
      let mailOptions = {
        from: "<my-email>",
        to: user.email,
        subject: "Account Verification at Simplified Client Portal",
        text:
          "Hello,\n\n" +
          "Please verify your account by clicking the link: \nhttp://" +
          req.headers.host +
          "/confirmation/" +
          validToken.token +
          ".\n"
      };
      transporter.sendMail(mailOptions, function(err) {
        if (err) {
          return res.status(500).send({ msg: err.message });
        }
        res
          .status(200)
          .send("A verification email has been sent to " + user.email + ".");
      });
    });
  });
};

这是我注释掉的代码

// res.status(200);
// res.json({
//   token: token
// });

一件有趣的事,当我在服务器控制台中收到HTTP_HEADERS_SENT错误时,将创建用户和令牌,但不会发送电子邮件。不知道为什么会这样。

0 个答案:

没有答案