【问题标题】:Node/Express: API using async awaitNode/Express:使用异步等待的 API
【发布时间】:2019-02-08 21:13:19
【问题描述】:

我是 node 新手,想知道我在 API 设计中使用 async/await 是否朝着正确的方向前进。

目前这只是一个 MVP 项目,但我有兴趣学习好的模式。

堆栈:Node、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 交互的方式上犯了一个菜鸟错误,这会在将来咬我。 (不知道我还不知道的情况。)我不是在寻找一般的编码最佳实践(上面的代码是简化的),尽管他们是受欢迎的。

【问题讨论】:

  • “更好” 怎么样?如果它已经过测试并且可以正常工作,那么问题是什么?
  • 这可能更适合Code Review
  • @jonrsharpe 我已经编辑了我的问题;希望这会减少我正在寻找的东西。
  • 我建议您使用 ORM,而不是创建原始查询。我正在使用 Objection.js(使用 Knex.js 查询生成器),我很高兴

标签: node.js express mysql2


【解决方案1】:

最好将所有可能导致错误的代码放在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
    }
  };

其他方面已经足够好了。

【讨论】:

    【解决方案2】:

    如果没有更多背景信息并查看完整项目,很难回答您的问题。就 async/await 而言,如果它可以正常工作,那就没问题了。

    话虽如此,总有空间以不同的方式做事,这可以提高代码的灵活性和可重用性。

    例如,添加验证、对 express 应用进行分层、将应用逻辑与框架解耦等等。

    如果你有兴趣,这里有一些额外阅读的链接:

    https://github.com/i0natan/nodebestpractices

    https://nodefunction.com/nodejs/node-js-roadmap-a-route-from-beginners-to-become-expert-developer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-20
      • 1970-01-01
      • 2021-03-17
      • 2018-06-11
      • 1970-01-01
      • 2023-04-06
      • 2018-11-17
      • 1970-01-01
      相关资源
      最近更新 更多