Ошибка типа: query.findAll не является функциональным узлом js mysql

#javascript #node.js #async-await #mysql-connector

#javascript #node.js #асинхронный-ожидание #mysql-connector

Вопрос:

я пытаюсь передать параметры sql-запроса в js-файл доступа к данным. я импортировал функцию в текущий файл, но все равно получаю приведенную ниже ошибку.

текущий файл

 const tcount = async (value) => {
  const sql = 'trainingcount';
  const result = await query.findAll(sql);
  return resu<
}
  

файл доступа к данным

 const query = (results) => {
  findAll: async (sql, result) => {
    connection.query(`SELECT * FROM trainingcount`, (err, rows) => {
      if (err) {
        return results(null, err);
      } else {
        return results(rows);
      }
    });
  };
};

export { query };
  

(узел: 11132) Необработанное предупреждение об отказе: ошибка типа:
query.findAll не является функцией

Комментарии:

1. Я немного смущен тем, что query должно быть. Похоже, что это функция с одним параметром, но вы пытаетесь получить доступ к ее свойству.

2. Пожалуйста, покажите нам, как вы импортируете query объект в «текущий файл»

3. я выполнил импорт, используя import {query} из ‘../helpers/dataManager.js ‘;

4. Как вы используете query ? Используете ли вы его где-нибудь еще? Вы это написали или где-то нашли? Если вы его где-то нашли, может быть, у них есть примеры того, как его использовать? Потому что похоже, что вы используете его не так, как он должен использоваться.

5. Если вы написали это, то как вы собираетесь его использовать? Почему вы написали query = (results) => { ... } , а не query = { findAll: ... } ? results Для чего это нужно? Кроме того, query = (results) => ... это то же самое query = function(results) { ... } , что и функция so query , это не объект со findlAll свойством, как вы ожидаете.

Ответ №1:

РЕДАКТИРОВАТЬ: проверьте @rid решения в комментариях для конкретной проблемы вызова правильной функции. Мой ответ решает другую проблему в операционном коде.


вы вызываете return внутри функции обратного вызова, поэтому вы возвращаете ЭТУ функцию, а не findAll . Вам нужно вернуть обещание:

 const query = (results) => {
 findAll: (sql, result) => {
  return new Promise((resolve, reject) => {
   connection.query(`SELECT * FROM trainingcount`, (err, rows) => {
    if (err) {
     reject(err);
    } else {
     resolve(rows);
    }
   });
  });
 };
};

export { query };
  

Комментарии:

1. Спасибо, что объяснили, как вернуть @gbalduzzi .узнал хороший способ кодирования