我是Node的新手,想知道我是否在API设计中使用 async / await 朝着正确的方向前进。
目前,这仅用于MVP项目,但我对学习良好的模式感兴趣。
堆栈:节点,Express,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);
};
上面的代码可以完成我想做的事情,但是我想知道我是否在以 endpoint与db 交互的方式犯了一个菜鸟错误,将来会咬我。 (不知道我不知道的情况。)尽管如此,但我并不是在寻找通用的编码最佳实践(上面的代码已简化)。
答案 0 :(得分:2)
最好将所有可能导致错误的代码放在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
}
};
在其他方面,它已经足够好了。
答案 1 :(得分:0)
在没有更多上下文和完整项目的情况下很难回答您的问题。就异步/等待而言,如果它能正常工作,那就很好了。
话虽如此,总有空间以不同的方式做事,这可以提高代码的灵活性和可重用性。
例如,添加验证,对快速应用程序进行分层,将应用程序逻辑与框架分离,等等。
如果您有兴趣,可以通过以下链接进行额外阅读:
https://github.com/i0natan/nodebestpractices
https://nodefunction.com/nodejs/node-js-roadmap-a-route-from-beginners-to-become-expert-developer