SQL transactions with nodejs pool.query code example

Example: begin transaction in node js using pool query

module.exports = {
  creatUser: (req) => {
    return new Promise((resolve, reject) => {
      pool.getConnection(function (err, connection) {
        connection.beginTransaction(function (err) {
          if (err) {
            //Transaction Error (Rollback and release connection)
            connection.rollback(function () {
              connection.release();
            });

            return reject(err);
          } else {
            connection.query(
              `insert into ?? (name, email) values (?,?)`,
              [
                "user",
                req.name.trim(),
                req.email.trim()
              ],

              function (err, uResults) {
                if (err) {
                  //Query Error (Rollback and release connection)
                  connection.rollback(function () {
                    connection.release();
                  });
                  return reject(err);
                } else {
                  let values = [];
                  req.departmentId.forEach(function (result) {
                    let l = [uResults.insertId, result];
                    values.push(l);
                  });
                  console.log("vale", values);
                  connection.query(
                    `insert into u_dep (u_id, dep_id) values ?`,
                    [values],
                    function (err, results) {
                      if (err) {
                         connection.rollback(function () {
                          connection.release();
                        });
                        return reject(err);
                      } else {
                        connection.commit(function (err) {
                          if (err) {
                            connection.rollback(function () {
                              connection.release();
                            });
                            return reject(err);
                          } else {
                            connection.release();
                            return resolve(uResults);
                          }
                        });
                      }
                    }
                  );
                }
              }
            );
          }
        });
      });
    });
  },
};