Как мне обработать 'ER_DUP_ENTRY' из MySQL, чтобы мое приложение в node.js не зависало - PullRequest
0 голосов
/ 26 апреля 2020

Я настроил свою таблицу так, чтобы столбец чисел содержал UNIQUE INDEX, который не позволит дубликатам случайно сгенерированного числа вставляться в базу данных. Для приложения крайне важно не записывать паролей в базу данных. Я даю каждому человеку, который посещает сайт, случайное число, которое затем показывается им после того, как они отправят свое имя. Это как 100 цифр, написанных на кусочках бумаги и помещенных в шляпу, из которых каждый тянет один номер, просто онлайн с базой данных, потому что мне нужно видеть, кто получил номер в режиме реального времени.

Проблема в том, что, когда я получаю ошибку «ER_DUP_ENTRY» из базы данных, приложение вылетает. Я не могу иметь сбои, очевидно, потому что он должен работать бесперебойно. Я пробовал с try...catch методом, но в итоге он просто использует тот же сгенерированный номер в catch (который предназначен для отправки другого запроса, если первый не удастся)

Это мой JavaScript код запустить на node.js сервере:

var random = uniqueRandom(1, 100);
var randomOne = uniqueRandom(1, 100);


try {
  app.post('/createEntry', urlencodedParser, function(req, res) {
    var values = [String(req.body.name), String(random())];
    var insert = "INSERT INTO person (name, number) VALUES (?)"
    con.query(insert, [values], function(err, result) {
      console.log(err);
      if (err) throw err;
      console.log("A new value was inserted into database. Value input: " + values);
      res.render(path.join(__dirname + '/numberServe'), {
        number: values[1]
      });
    });
  });
} catch (err) {
  app.post('/createEntry', urlencodedParser, function(req, res) {
    var valuesOne = [String(req.body.name), String(randomOne())];
    var insert = "INSERT INTO person (name, number) VALUES (?)"
    con.query(insert, [valuesOne], function(err, result) {
      console.log(err);
      if (err) throw err;
      console.log("A new value was inserted into database. Value input: " + values);
      res.render(path.join(__dirname + '/numberServe'), {
        number: valuesOne[1]
      });
    });
  });

};

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

var random = uniqueRandom(1, 100);
var randomOne = uniqueRandom(1, 100);

Как бы я обработал эту ошибку, чтобы она не взломала sh моего приложения и в то же время дал бы уникальный номер человеку, отправляющему свое имя? Это должно произойти, не зная, что произошла ошибка: D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...