这个和express关系不大, 只要是看你用什么数据库连接的库,不同的库有不同的处理方式看到你用的是 mysql,这个库,事务和写法就比较麻烦,一真要callback callback,类似如下db.getConnection((ex, connection) => { if (ex) { cb(ex); } else { cb = (cb => { return function () { connection.release(); cb.apply(this, arguments); }; })(cb); connection.beginTransaction(ex => { if (ex) { cb(ex); } else { connection.query('INSERT INTO table1 ("value") VALUES (\'my value\');', ex => { if (ex) { cb(ex); } else { connection.query('INSERT INTO table2 ("value") VALUES (\'my other value\')', ex => { if (ex) { cb(ex); } else { connection.commit(ex => { cb(ex); }); } }); } }); } }); } });建议改成用mysql2库 有和mysql 类似的API接口,但是它支持async/await 代码会好看很多类似如下:const connection = await mysql.createConnection(databaseConfigs) try { await connection.beginTransaction() const queryPromises = [] queries.forEach((query, index) => { queryPromises.push(connection.query(query, queryValues[index])) }) const results = await Promise.all(queryPromises) await connection.commit() await connection.end() return results } catch (err) { await connection.rollback() await connection.end() return Promise.reject(err) }本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
这个和express关系不大, 只要是看你用什么数据库连接的库,不同的库有不同的处理方式
看到你用的是 mysql,这个库,事务和写法就比较麻烦,一真要callback callback,
类似如下
建议改成用mysql2库 有和mysql 类似的API接口,但是它支持async/await 代码会好看很多
类似如下: