【发布时间】:2019-04-04 13:30:17
【问题描述】:
当我需要在单个请求中运行多个查询时,查看在 Node.js/Express.js 应用程序中使用 AWAIT 和 MySQL2 的正确/最佳/更好方法。
在我的应用程序的早期,我从我的数据库配置中创建了一个 Promise 池
const promisePool = db.promise();
然后,在 POST 请求中,我接受 2 个值,我需要验证这两个值都是有效的,然后将返回的 ID 插入到另一个表中。
以下是我的第一次尝试,但我错过了 JS 的并发优点。 (出于演示目的,我过度简化了所有调用/SQL),
app.post('/addUserToDepartment', async (req, res) => {
// Get the POST variables
let email = 'example@example.com';
let departmentname = 'sales';
let insertParams = [];
// Need to check if Department ID is even valid
const [departments] = await promisePool.query( "SELECT ? AS deptid", [departmentname] );
// Need to check if Email address is valid
const [user] = await promisePool.query( "SELECT ? AS userid", [email] );
// This would normall be an INSERT or UPDATE statement
if(departments.length && user.length){
const [rows] = await promisePool.query( "SELECT ? AS passedDeptId,? AS passedUserid", [departments[0].deptid, user[0].userid] );
}
res.send( rows )
}
这是我的第二次尝试,现在结束承诺。
app.post('/addUserToDepartment', async (req, res) => {
// Get the POST variables
let email = 'example@example.com';
let departmentname = 'sales';
let insertParams = [];
// Need to check if Department ID is even valid
let [[departments],[user]] =
await Promise.all([
promisePool.query( "SELECT ? AS deptid", [departmentname] ),
promisePool.query( "SELECT ? AS userid", [email] )
])
// This would normall be an INSERT or UPDATE statement
if(departments.length && user.length){
let [rows] = await promisePool.query( "SELECT ? AS passedDeptId,? AS passedUserid", [departments[0].deptid, user[0].userid] );
}
res.send( rows )
}
最后的 IF 仍然“感觉”不正确,但我需要知道前两个查询是有效的,否则我会将用户发送到错误页面。
在不牺牲可读性的情况下实现上述结果的更好方法是什么?
【问题讨论】:
标签: node.js express promise async-await node-mysql2