Я создаю Express сервер для получения запроса (диктата с 10 элементами) от моего внешнего интерфейса React, а затем сохраняю данные в базе данных. Ниже приведен мой код.
Я обнаружил, что запрос может обработать sh во время вставки, например, 2 запроса получили одинаковый идентификатор с помощью last_insert_id (). Я пытался использовать setTimeout (), чтобы обернуть функцию getConnection, но проблема все еще существует. Как лучше решить проблему?
Данные запроса:
{{.....}, {.....}, {.....}, {.....}, {.....}} #10 item
Код:
router.post('/fruit', (req, res) => {
const dict = req.body;
let itemCount = 0;
var err_list = [];
Object.keys(dict).forEach(function(r){
let query = "call sp_insert_fruit();"
setTimeout(function() {
getConnection(function(err, conn){
if (err) {
return res.json({ success: false, error: err })
} else {
conn.query(query, function (err, result, fields) {
if (err) {
err_list.push({'errno':err.errno, 'sql_message':err.sqlMessage});
}
itemCount ++;
if (itemCount === Object.keys(dict).length) {
conn.release()
console.log('released', err_list)
if (err_list .length === 0) {
return res.json({ success: true});
} else {
return res.json({ success: false, error: err_list});
}
}
});
}
});
}, 1000);
});
});
соединение. js:
const p = mysql.createPool({
"connectionLimit" : 100,
"host": "example.org",
"user": "test",
"password": "test",
"database": "test",
"multipleStatements": true
});
const getConnection = function(callback) {
p.getConnection(function(err, connection) {
callback(err, connection)
})
};
module.exports = getConnection