@Artem641

Как вернуть результат из функции connection.query?

Есть простой скрипт на node.js реализующий функции простого сервера для работы с БД Mysql.
Подключен пакет mysql.
Как можно вернуть результат запроса в БД из функции?
Тут получается, что результат нужно вернуть сначала из колбэка, а потом из функции.
В приведенном ниже примере я получаю в user огромное количество информации, но только не моего пользователя.

const query = `select * from users where username ='${username}'`
const user = connection.query(query, (err, result) => {
      if (err) {
        return console.log(err)
      }
      return result
    })
console.log(user)


Если сделать вывод в консоль внутри колбэка то пользователя мы получаем:
[
  RowDataPacket {
    id: 14,
    username: 'Stive',
    password: '$2a$07$0MtPJ3sMa1xrQUlixbTY5.V0KNcqNuTbhdxqE1gVJELMeFZ8MXDp2'  }
]


И такой еще вопрос: что за странный формат данных приходит? Я имею ввиду в массиве строку 'RowDataPacket', обычно массив с объектами выглядит как то так: [{...}, {...}, {...}]
Я предполагаю, что это какой то промежуточный тип данных, отдаваемы БД( о чем говорит слово ROW - сырой), может есть какая либо функция для преобразования в привычный вид?
  • Вопрос задан
  • 66 просмотров
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
1. Приходит объект, созданный функцией RowDataPacket.
2. Данные, полученные в коллбэке, надо использовать в этом коллбэке. Можно записать их в глобальную переменную, но доступны данные всё равно будут после асинхронного вызова каллбэка, а не после завершения функции query. Как вариант - переходите на промисы с async/await, пакет mysql2 с враппером promise, но тогда большинство функций станет async.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы