首页 > 解决方案 > 即使使用返回,电子邮件仍在发送和数据捕获

问题描述

我正在验证一个 reCaptcha 令牌,并故意使其测试失败。我可以在控制台中看到我收到了返回的错误,但电子邮件仍在发送,并且表单数据仍在数据库中捕获。我认为由于我使用的是 return 它会停止其轨道中的所有内容并且不会将电子邮件/写入发送到数据库?

  request(verifyUrl, (error, response, body) => {
    body = JSON.parse(body);
    console.log(body);
    if (body.success !== undefined && !body.success) {
      return res.status(422).json({ errors: "Failed captcha verification" });
    }
  });

  let contact = new Contact({
    firstName: firstName,
    lastName: lastName,
    email: email,
    comments: comments,
  });
  contact = await contact.save();

// send email code

我尝试做一个 if else 但得到关于不是异步函数的错误

标签: node.js

解决方案


那是一个异步调用。您传递给 request 的回调将仅在函数的整个主体(包括联系人创建)执行后才会执行。

request(verifyUrl, async (error, response, body) => {
    body = JSON.parse(body);
    console.log(body);
    if (body.success !== undefined && !body.success) {
      return res.status(422).json({ errors: "Failed captcha verification" });
    }

    let contact = new Contact({
      firstName: firstName,
      lastName: lastName,
      email: email,
      comments: comments,
    });
    contact = await contact.save();
  });

如果您想通过该 return 语句阻止它,您需要将联系人创建移动到回调。


推荐阅读