Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2021 February 17

PS

Pavel Shakhov (pongo... in NodeUA - JavaScript and Node.js in Ukraine
Chumachenko Mihail
QQ!
Помогите пожалуйста)
*express*
У меня такая проблема:
Есть БД mysql из нее хочу вывести данные.
Проблема в том, что запрос выполняется, данные приходят, но потом куда-то улетучиваются)))
+ я никак не могу разобраться как дождаться результата выполнения запроса, а после уже выводить его.

db.js
...
makeQuery(query) {
       this.connection.query(query, (err, result) => {
           if(err)
               console.log('query error!!!' + err.message);
           console.log(result);
           return result;
       });
   }

queries.js
...
function selectUserByName (){
       console.log('query start')
       var result =db.makeQuery("SELECT * FROM user");
       console.log(result);
       console.log('query end');
};

в db.js result выводит, а уже в queries.js - нет.

Console:
query start
undefined
query end
*Результат запроса*

Куда девается результат запроса после вызова функции и как сделать структуру async-await чтобы дождаться результата?

Заранее огроменное спасибо!
это потому что makeQuery ничего не возвращает. return result выполняется не в makeQuery, а в коллбеке функции connection.query. и чтобы makeQuery вернул результат, тебе нужно добавить в нее коллбек:

  makeQuery(query, callback) {
   this.connection.query(query, (err, result) => {
     if (err) console.log("query error!!!" + err.message);
     console.log(result);
     callback(result);
   });
 }

function selectUserByName() {
 console.log("query start");
 db.makeQuery("SELECT * FROM user", (result) => {
   console.log(result);
   console.log("query end");
 });
}

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

CM

Chumachenko Mihail in NodeUA - JavaScript and Node.js in Ukraine
Pavel Shakhov (pongo)
это потому что makeQuery ничего не возвращает. return result выполняется не в makeQuery, а в коллбеке функции connection.query. и чтобы makeQuery вернул результат, тебе нужно добавить в нее коллбек:

  makeQuery(query, callback) {
   this.connection.query(query, (err, result) => {
     if (err) console.log("query error!!!" + err.message);
     console.log(result);
     callback(result);
   });
 }

function selectUserByName() {
 console.log("query start");
 db.makeQuery("SELECT * FROM user", (result) => {
   console.log(result);
   console.log("query end");
 });
}

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

CM

Chumachenko Mihail in NodeUA - JavaScript and Node.js in Ukraine
Pavel Shakhov (pongo)
это потому что makeQuery ничего не возвращает. return result выполняется не в makeQuery, а в коллбеке функции connection.query. и чтобы makeQuery вернул результат, тебе нужно добавить в нее коллбек:

  makeQuery(query, callback) {
   this.connection.query(query, (err, result) => {
     if (err) console.log("query error!!!" + err.message);
     console.log(result);
     callback(result);
   });
 }

function selectUserByName() {
 console.log("query start");
 db.makeQuery("SELECT * FROM user", (result) => {
   console.log(result);
   console.log("query end");
 });
}

сейчас уже появились способы работы без коллбеков, что куда удобнее. но это ты уж сам изучай, ссылки тебе дали
Я не особо понял откуда взялась функция callback(result)?

Спасибо заранее!!!
источник

PS

Pavel Shakhov (pongo... in NodeUA - JavaScript and Node.js in Ukraine
Chumachenko Mihail
Я не особо понял откуда взялась функция callback(result)?

Спасибо заранее!!!
makeQuery(query, callback)
источник

CM

Chumachenko Mihail in NodeUA - JavaScript and Node.js in Ukraine
Pavel Shakhov (pongo)
makeQuery(query, callback)
thx
источник

PS

Pavel Shakhov (pongo... in NodeUA - JavaScript and Node.js in Ukraine
когда мы вызываем db.makeQuery, то передаем вторым параметром ей функцию коллбека
источник

NN

Nikita Nesterchuk in NodeUA - JavaScript and Node.js in Ukraine
Если уже делать в колбек стиле, то надо добавлять и error в ответ на колбек.

 makeQuery(query, callback) {
   this.connection.query(query, (err, result) => {
     if (err) return callback(err, null);
     console.log(result);
     callback(null, result );
   });
 }

function selectUserByName() {
 console.log("query start");
 db.makeQuery("SELECT * FROM user", (err, result) => {
   if (err) {
       // do something
   }
   console.log(result);
   console.log("query end");
 });
}
источник

NN

Nikita Nesterchuk in NodeUA - JavaScript and Node.js in Ukraine
Но конечно лучше переезжать уже давно на promises/async function.
источник

NN

Nikita Nesterchuk in NodeUA - JavaScript and Node.js in Ukraine
чтобы красиво конвертить колбек функции в promise-ы, то можно использовать вспомогательную тулзу из utils - promisify(дока по ноде в помощь)
источник

E

Evgen in NodeUA - JavaScript and Node.js in Ukraine
Nikita Nesterchuk
чтобы красиво конвертить колбек функции в promise-ы, то можно использовать вспомогательную тулзу из utils - promisify(дока по ноде в помощь)
+
источник

NK

ID:0 in NodeUA - JavaScript and Node.js in Ukraine
Обновил подписку на патреоне, добавил три плана для проектов и бизнеса, которые включают консалтинг, менторинг и сертификацию - https://www.patreon.com/tshemsedinov
источник

Г

Глеб in NodeUA - JavaScript and Node.js in Ukraine
А можно про сертификацю где-то почитать подробнее? Еще ж недавно она только в планах была, уже все готово?
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Глеб
А можно про сертификацю где-то почитать подробнее? Еще ж недавно она только в планах была, уже все готово?
Еще не готова, я объявлю отдельно
источник

EG

Evgeniy Gromin in NodeUA - JavaScript and Node.js in Ukraine
Timur Shemsedinov
Еще не готова, я объявлю отдельно
Community план - там в описании url добавлен лишний
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Evgeniy Gromin
Community план - там в описании url добавлен лишний
спасибо, исправил
источник

OJ

Oleg Junior in NodeUA - JavaScript and Node.js in Ukraine
Здравствуйте! Прошу помочь регулярку составить. Должно остаться только это слово "thisWordOnly"

const inputValue = "[javascript] created:2016..2019 answers:1 -React -[angular] -[jquery] thisWordOnly"

function getSearchWords(inputValue) {
 const words = inputValue.split(' ')
 const skipRegex = /^-?\[.*\]$/gi // <-- не умею в регулярки

 const necessaryWords = words.filter(word => {
   const skip = !skipRegex.test(word)
   return skip
})

 return necessaryWords
}
console.log(getSearchWords(inputValue))
/*
 [
 'created:2016..2019',
   'answers:1',
   '-React',
   '-[jquery]',
   'thisWordOnly' <-- только это слово должно остаться
 ]
*/
источник

DB

Dima Bildin in NodeUA - JavaScript and Node.js in Ukraine
Oleg Junior
Здравствуйте! Прошу помочь регулярку составить. Должно остаться только это слово "thisWordOnly"

const inputValue = "[javascript] created:2016..2019 answers:1 -React -[angular] -[jquery] thisWordOnly"

function getSearchWords(inputValue) {
 const words = inputValue.split(' ')
 const skipRegex = /^-?\[.*\]$/gi // <-- не умею в регулярки

 const necessaryWords = words.filter(word => {
   const skip = !skipRegex.test(word)
   return skip
})

 return necessaryWords
}
console.log(getSearchWords(inputValue))
/*
 [
 'created:2016..2019',
   'answers:1',
   '-React',
   '-[jquery]',
   'thisWordOnly' <-- только это слово должно остаться
 ]
*/
const skip = !skipRegex.test(word)
поменять на

word.match('thisWordOnly')
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
inputValue.split(' ').pop()
источник

R

Rudyak Denis in NodeUA - JavaScript and Node.js in Ukraine
Ребят, все добрый день. Обращаюсь к вам за советом. Теоретически есть приложение которое работает с mongodb. Для работы с данными используеться mongoose. Подскажите как правильно котролировать подключение к БД, нужно ли закрывать каждое подключение после отроботки запросов или нет?
источник

OJ

Oleg Junior in NodeUA - JavaScript and Node.js in Ukraine
Dima Bildin
const skip = !skipRegex.test(word)
поменять на

word.match('thisWordOnly')
так бы я написал. это шаблон просто
источник