как предотвратить множественный запрос в Node.js

#javascript #node.js

#javascript #node.js

Вопрос:

У меня есть конечная точка contact us в моем Nodejs, которая получает FormData из интерфейса и сохраняет FormData в моей базе данных. Если кто-то использует приложение, такое как postman или что-то еще, может настроить таргетинг на мою конечную точку, отправив несколько запросов с одинаковыми FormData! У меня нет аутентификации в моем приложении, поэтому я не могу поставить перед ним никаких условий.

 router.post("/", upload.none(), async (req, res) => {
  console.log("req", req.body);
  if (!req.body) {
    res.send({ success: false, msg: "Cannot send blank message!" });
    return;
  }
  let body = JSON.parse(req.body.contact);
  if (!body.email || !body.message || !body.subject) {
    res.send({ success: false, msg: "Mandatory fields are not filled!" });
    return;
  }
  try {
    await getDb("messages").insertOne({
      name: body.name,
      email: body.email,
      phone: body.phone,
      subject: body.subject,
      message: body.message,
    });

    res.send(
      JSON.stringify({
        success: true,
        msg: "Message has been sent successfully",
      })
    );
  } catch (err) {
    console.log(err);
    res.send(JSON.stringify({ success: false, msg: err }));
  }
});

export default router;
  

Комментарии:

1. Вам нужно было бы сохранить некоторое состояние о человеке, отправившем форму, например, объект со списком IP-адресов (или реальную базу данных, если вы хотите, чтобы она сохранялась). Когда данные пользователя успешно добавлены в базу данных, сохраните ключ в объекте у этого пользователя. Перед вызовом обязательно проверьте, успешно ли они отправили данные insertOne . Не слишком безумно.

2. Спасибо за ответ, я планировал отделить серверную часть от интерфейса, с этой идеей я не уверен, получу ли я IP от node, это даст мой IP-адрес интерфейса или пользователя ip? возможно, мне потребуется исключить свой IP-адрес интерфейса, верно?