Node/Express: API с использованием асинхронного ожидания

Я новичок в узле и мне интересно, двигаюсь ли я в правильном направлении, используя асинхронно/ожидание в дизайне 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);
  };

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

"Лучше" как? Если он протестирован и работает, в чем проблема?
jonrsharpe 08.02.2019 22:14

Это может лучше подходить для Обзор кода.

nicholaswmin 08.02.2019 22:15

@jonrsharpe Я отредактировал свой вопрос; надеюсь, это уменьшит то, что я ищу.

Devin 08.02.2019 22:36

Вместо создания необработанных запросов я рекомендую вам использовать ORM. Я использую Objection.js (который использует построитель запросов Knex.js), и я так счастлив

Rashomon 08.02.2019 22:51
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
655
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

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

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

https://github.com/i0natan/nodebestpractices

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

Ответ принят как подходящий

Весь код, который может вызвать ошибки, желательно помещать внутрь блока 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
    }
  };

В остальном он уже достаточно хорош.

Другие вопросы по теме