Я настроил свою таблицу так, чтобы столбец чисел содержал 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