节点/快递:API使用异步等待

问题描述 投票:0回答:2

我是新来的节点,如果我在我的异步的使用方向是正确的也得走不知道/等待在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);
  };

上面的代码做什么,我想这样做,但我不知道如果我犯在哪个端点与数据库交互的方式一个新手的错误,那会咬我的未来。 (的情况下,不知道是什么我不知道。)我不是找一般的编码最佳实践(上面的代码简化)虽然他们的欢迎。

node.js express mysql2
2个回答
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
    }
  };

在其他方面,它已经足够好了。


0
投票

它很难回答你的问题没有一点背景,看到完整的项目。至于异步/等待进入,如果它的工作,那么它的罚款。

话虽这么说,总是有做的事情不同的方式,它可以提高代码的灵活性和可重用性。

例如,添加验证,分层您明确的应用程序,从框架解耦应用程序逻辑,等等。

以下是如果你有兴趣额外的阅读一些链接:

https://github.com/i0natan/nodebestpractices

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

© www.soinside.com 2019 - 2024. All rights reserved.