Ошибка Не удается установить заголовки после их отправки клиенту - PullRequest
0 голосов
/ 19 февраля 2020

Попытка зарегистрировать пользователя и отправить электронное письмо пользователю для проверки, но кажется, что наличие нескольких ответов вызывает проблему.

Это ошибка, которую я получаю с моего express сервера

_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

Когда я комментирую ту часть, которая, по моему мнению, вызывает ошибку, она исчезает, но я получаю статус 500 с моей консоли chrome.

Вот так выглядит мой код в тот момент, когда я получаю статус 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 в консоли сервера, пользователь и токен создаются, но электронное письмо не отправляется. Не уверен, почему это так.

...