节点/快递:API使用异步等待
我是新来的节点,如果我在我的异步的使用方向是正确的也得走不知道/等待在API的设计。
目前,这仅仅是一个MVP的项目,但我感兴趣的是学习的好模式。
堆栈:节点,快速,MySQL的(使用mysql2
包)
以下是我的终点的简化版本,应该给你的我在做什么的想法:
createUser = async (req, res) => {
const name = req.body.name;
const email = req.body.email;
let query = 'insert into Users set name = ?, email = ?';
const values = [name, email];
query = mysql.format(query, values);
let result;
// in the project, this is abstracted
try {
const [rows] = await this.dbPool.execute(query);
// do something with the result of the query. simplified eg:
result = rows.insertId;
} catch (err) {
// handle error and assign appropriate value to result
}
res.send(result);
};
上面的代码做什么,我想这样做,但我不知道如果我犯在哪个端点与数据库交互的方式一个新手的错误,那会咬我的未来。 (的情况下,不知道是什么我不知道。)我不是找一般的编码最佳实践(上面的代码简化)虽然他们的欢迎。
回答如下:这是最好把所有的代码,可能会导致try
块中的错误。
有没有必要result
临时变量。 res.send(rows.insertId)
可以直接try
块里面放,因为任何误差以外不会被一个中间件处理,并且将导致在悬浮请求:
createUser = async (req, res) => {
try {
const name = req.body.name;
const email = req.body.email;
let query = 'insert into Users set name = ?, email = ?';
const values = [name, email];
query = mysql.format(query, values);
const [rows] = await this.dbPool.execute(query);
// do something with the result of the query. simplified eg:
res.send(rows.insertId);
} catch (err) {
// handle error and assign appropriate value to result
}
};
在其他方面,它已经足够好了。