Узел / Экспресс: API, использующий асинхронное ожидание - PullRequest
0 голосов
/ 09 февраля 2019

Я новичок в узле, и мне интересно, движусь ли я в правильном направлении, используя async / await в разработке API.

В настоящее время это только для проекта 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);
  };

Приведенный выше код делает то, что я хочу сделать, но мне интересно, совершаю ли я новичкаошибка в том, как конечная точка взаимодействует с db , это укусит меня в будущем.(случай не знаю, чего я еще не знаю.) Я не ищу общих рекомендаций по кодированию (приведенный выше код упрощен), хотя они приветствуются.

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Желательно поместить весь код, который может вызвать ошибки, в блок 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 голосов
/ 09 февраля 2019

Трудно ответить на ваш вопрос, не разбираясь с контекстом и не увидев весь проект.Что касается async / await, то если он работает, то это нормально.

При этом всегда есть возможность действовать по-другому, что может повысить гибкость и возможность повторного использования вашего кода.

Например, добавление проверки, наложение вашего экспресс-приложения, отделение логики вашего приложения от фреймворков и т. Д.

Вот несколько ссылок для дополнительного чтения, если вам интересно:

https://github.com/i0natan/nodebestpractices

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...