Код по-прежнему продолжается даже после появления ошибки

#mysql #node.js #express

#mysql #node.js #экспресс

Вопрос:

Я новичок в Node.js и Express.js, и хотел бы получить некоторые рекомендации.

Я пытаюсь выполнить вставку в базу данных MySQL, где есть таблицы с именами delivery_order и delivery_order_item . Когда пользователь отправил информацию о заказе на доставку (это входит в первую таблицу), включая доставленные товары (товары будут вставлены в последнюю таблицу, где у нее есть внешний ключ delivery_order_number ), я хотел бы выполнить вставку в обе таблицы. Однако, если при вставке в delivery_order таблицу обнаружится ошибка, товары также не будут вставлены в таблицу товаров, следовательно beginTransaction .

Проблема, например, в том, что когда я пытаюсь вставить дубликат первичного ключа delivery_order таблицы (что, очевидно, приводит к ошибке), коды все равно вставляют товары в ее таблицу и не прерывают весь процесс. Я позаботился о том, чтобы записать throw err все области ошибок, но это не работает.

Буду признателен за любой совет.

 delivery_order.insert = (data) =gt; {  const tableData = data.tableData;  const formInfo = data.formInfo;   var datetime = new Date(formInfo.date);  datetime = moment(datetime).format("YYYY-MM-DD");   var duetime = new Date(formInfo.due);  duetime = moment(duetime).format("YYYY-MM-DD");   let formValues = {  number: formInfo.number,  name: formInfo.name,  address: formInfo.address,  date: datetime,  due: duetime,  city: formInfo.city,  note: formInfo.note,  };   let itemValues = [];   for (var i = 0; i lt; tableData.length; i  ) {  itemValues.push([  formInfo.number,  tableData[i].code,  tableData[i].name,  tableData[i].qty,  tableData[i].unit,  ]);  }   return new Promise((resolve, reject) =gt; {  pool.getConnection((err, connection) =gt; {  if (err) return reject(err);  connection.beginTransaction((err) =gt; {  if (err) {  connection.rollback(() =gt; {  connection.release();  throw err;  });  }  connection.query(  "INSERT INTO delivery_order SET ?",  formValues,  (err, results) =gt; {  if (err) {  connection.rollback(() =gt; {  connection.release();  throw err; // Code still continues down there and doesn't abort even after getting an error here.  });  }  connection.query(  "INSERT INTO delivery_order_item (delivery_order_number, code, name, qty, unit) VALUES ?",  [itemValues],  (err, results) =gt; {  if (err) {  connection.rollback(() =gt; {  connection.release();  throw err;  });  }   connection.commit(function (err) {  if (err) {  connection.rollback(() =gt; {  connection.release();  throw err;  });  }   connection.release();  return resolve("ok");  });  }  );  }  );  });  });  }); };