提问者:小点点

电子邮件仍在发送,即使使用返回也捕获了数据


我正在验证一个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,但是得到了关于不是异步函数的错误


共1个答案

匿名用户

那是一个异步调用。 您传递给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();
  });

如果希望通过返回语句阻止联系人创建,则需要将联系人创建移动到回调中。